Asignación dinámica de matrices en C ++ con ejemplo

Tabla de contenido:

Anonim

¿Qué es una matriz dinámica?

Una matriz dinámica es bastante similar a una matriz normal, pero su tamaño se puede modificar durante el tiempo de ejecución del programa. Los elementos DynamArray ocupan un bloque contiguo de memoria.

Una vez que se ha creado una matriz, no se puede cambiar su tamaño. Sin embargo, una matriz dinámica es diferente. Una matriz dinámica puede expandir su tamaño incluso después de haberse llenado.

Durante la creación de una matriz, se le asigna una cantidad predeterminada de memoria. Este no es el caso de una matriz dinámica, ya que aumenta el tamaño de su memoria en un cierto factor cuando es necesario.

En este tutorial de C ++, aprenderá

  • ¿Qué es una matriz dinámica?
  • Factores que afectan el rendimiento de las matrices dinámicas
  • La nueva palabra clave
  • Inicialización de matrices asignadas dinámicamente
  • Cambiar el tamaño de las matrices
  • Eliminación dinámica de matrices

Factores que afectan el rendimiento de las matrices dinámicas

El tamaño inicial de la matriz y su factor de crecimiento determinan su rendimiento. Tenga en cuenta los siguientes puntos:

  1. Si una matriz tiene un tamaño pequeño y un factor de crecimiento pequeño, seguirá reasignando memoria con más frecuencia. Esto reducirá el rendimiento de la matriz.
  2. Si una matriz tiene un tamaño grande y un factor de crecimiento grande, tendrá una gran cantidad de memoria sin usar. Debido a esto, las operaciones de cambio de tamaño pueden tardar más. Esto reducirá el rendimiento de la matriz.

La nueva palabra clave

En C ++, podemos crear una matriz dinámica usando la nueva palabra clave. El número de artículos que se asignarán se especifica dentro de un par de corchetes. El nombre del tipo debe preceder a este. Se asignará el número solicitado de artículos.

Sintaxis:

La nueva palabra clave tiene la siguiente sintaxis:

pointer_variable = new data_type;

Pointer_variable es el nombre de la variable de puntero.

El tipo de datos debe ser un tipo de datos C ++ válido.

Luego, la palabra clave devuelve un puntero al primer elemento. Después de crear la matriz dinámica, podemos eliminarla usando la palabra clave delete.

Ejemplo 1:

#includeusing namespace std;int main() {int x, n;cout << "Enter the number of items: << "\n";cin >>n;int *arr = new int(n);cout << "Enter " << n << " items" << endl;for (x = 0; x < n; x++) {cin >> arr[x];}cout << "You entered: ";for (x = 0; x < n; x++) {cout << arr[x] << " ";}return 0;}

Producción:

Aquí hay una captura de pantalla del código:

Explicación del código:

  1. Incluya el archivo de encabezado de iostream en nuestro programa para usar sus funciones.
  2. Incluya el espacio de nombres std en nuestro programa para poder usar sus clases sin llamarlo.
  3. Llame a la función main (). La lógica del programa debe agregarse dentro del cuerpo de la función.
  4. Declare dos variables enteras x y n.
  5. Imprima un texto en la consola solicitando al usuario que ingrese el valor de la variable n.
  6. Leer la entrada del usuario desde el teclado y asignarla a la variable n.
  7. Declare una matriz para contener un total de n enteros y asígnela a la variable de puntero * arr.
  8. Imprima un mensaje solicitando al usuario que ingrese un número n de elementos.
  9. Use un bucle for para crear una variable de bucle x para iterar sobre los elementos ingresados ​​por el usuario.
  10. Leer los elementos ingresados ​​por el usuario y almacenarlos en el arreglo arr.
  11. Fin del cuerpo del bucle for.
  12. Imprime algo de texto en la consola.
  13. Utilice un bucle for para crear una variable de bucle x para iterar sobre los elementos de la matriz.
  14. Imprima los valores contenidos en la matriz denominada arr en la consola.
  15. Fin del cuerpo del bucle for.
  16. El programa debe devolver valor una vez completado con éxito.
  17. Fin del cuerpo de la función main ().

NOTA: En el ejemplo anterior, el usuario puede especificar cualquier tamaño para la matriz durante el tiempo de ejecución. Esto significa que el tamaño de la matriz se determina durante el tiempo de ejecución .

Inicialización de matrices asignadas dinámicamente

Es fácil inicializar una matriz dinámica a 0.

Sintaxis:

int *array{ new int[length]{} };

En la sintaxis anterior, la longitud denota el número de elementos que se agregarán a la matriz. Dado que necesitamos inicializar la matriz a 0, esto debe dejarse vacío.

Podemos inicializar una matriz dinámica usando una lista de inicializadores. Creemos un ejemplo que demuestre esto.

Ejemplo 2:

#include using namespace std;int main(void) {int x;int *array{ new int[5]{ 10, 7, 15, 3, 11 } };cout << "Array elements: " << endl;for (x = 0; x < 5; x++) {cout << array[x] << endl;}return 0;}

Producción:

Aquí hay una captura de pantalla del código:

Explicación del código:

  1. Incluya el archivo de encabezado de iostream en nuestro programa para usar sus funciones.
  2. Incluya el espacio de nombres std en nuestro programa para usar sus clases sin llamarlo.
  3. Llame a la función main (). La lógica del programa debe agregarse dentro del cuerpo de la función.
  4. Declare una variable entera llamada x.
  5. Declare una matriz dinámica denominada matriz utilizando una lista de inicializadores. La matriz contendrá 5 elementos enteros. Tenga en cuenta que no hemos utilizado el operador entre la longitud de la matriz y la lista de inicializadores.
  6. Imprime algo de texto en la consola. El endl es una palabra clave de C ++ que significa línea final. Mueve el cursor a la siguiente oración.
  7. Utilice un bucle for para iterar sobre los elementos de la matriz.
  8. Imprima el contenido de la matriz denominada matriz en la consola.
  9. Fin del cuerpo del bucle for.
  10. El programa debe devolver valor una vez completado con éxito.
  11. Fin del cuerpo de la función main ().

Cambiar el tamaño de las matrices

La longitud de una matriz dinámica se establece durante el tiempo de asignación.

Sin embargo, C ++ no tiene un mecanismo incorporado para cambiar el tamaño de una matriz una vez que se ha asignado.

Sin embargo, puede superar este desafío asignando una nueva matriz de forma dinámica, copiando los elementos y luego borrando la matriz anterior.

Nota: que esta técnica es propensa a errores, por lo tanto, intente evitarla.

Eliminación dinámica de matrices

Una matriz dinámica debe eliminarse de la memoria de la computadora una vez que se cumpla su propósito. La declaración de eliminación puede ayudarlo a lograr esto. El espacio de memoria liberado se puede utilizar para almacenar otro conjunto de datos. Sin embargo, incluso si no elimina la matriz dinámica de la memoria de la computadora, se eliminará automáticamente una vez que finalice el programa.

Nota:

Para eliminar una matriz dinámica de la memoria de la computadora, debe usar eliminar [], en lugar de eliminar. El [] indica a la CPU que elimine varias variables en lugar de una variable. El uso de eliminar en lugar de eliminar [] cuando se trata de una matriz dinámica puede generar problemas. Ejemplos de tales problemas incluyen pérdidas de memoria, corrupción de datos, bloqueos, etc.

Ejemplo 3:

#includeusing namespace std;int main() {int x, n;cout << "How many numbers will you type?" << "\n";cin >>n;int *arr = new int(n);cout << "Enter " << n << " numbers" << endl;for (x = 0; x < n; x++) {cin >> arr[x];}cout << "You typed: ";for (x = 0; x < n; x++) {cout << arr[x] << " ";}cout << endl;delete [] arr;return 0;}

Producción:

Aquí hay una captura de pantalla del código:

Explicación del código:

  1. Incluya el archivo de encabezado de iostream en nuestro programa para usar sus funciones.
  2. Incluya el espacio de nombres std en nuestro programa para poder usar sus clases sin llamarlo.
  3. Llame a la función main (). La lógica del programa debe agregarse dentro del cuerpo de la función.
  4. Declare dos variables x y n del tipo de datos enteros.
  5. Imprime algo de texto en la consola. El texto le pedirá al usuario que indique la cantidad de números que ingresará.
  6. Leer la entrada del usuario desde el teclado. El valor de entrada se asignará a la variable n.
  7. Declare una variable de puntero * arr. La matriz arr reservará algo de memoria para almacenar un total de n enteros.
  8. Imprima un mensaje en la consola solicitando al usuario que ingrese n números.
  9. Cree un ciclo for y la variable de ciclo x para iterar sobre los números ingresados ​​por el usuario.
  10. Leer los números ingresados ​​por el usuario y almacenarlos en la matriz arr.
  11. Fin del cuerpo del bucle for.
  12. Imprime algo de texto en la consola.
  13. Utilice un bucle for y la variable de bucle x para iterar sobre el contenido de la matriz arr.
  14. Imprima los valores de la matriz arr en la consola.
  15. Fin del cuerpo del bucle for.
  16. Imprime una línea vacía en la consola.
  17. Libera la memoria de la matriz arr.
  18. El programa devolverá valor cuando se complete con éxito.
  19. Fin del cuerpo de la función main ().

Resumen:

  • Las matrices regulares tienen un tamaño fijo. No puede modificar su tamaño una vez declarado.
  • Con estos tipos de matrices, el tamaño de la memoria se determina durante el tiempo de compilación.
  • Las matrices dinámicas son diferentes. Sus tamaños se pueden cambiar durante el tiempo de ejecución.
  • En matrices dinámicas, el tamaño se determina durante el tiempo de ejecución.
  • Las matrices dinámicas en C ++ se declaran utilizando la nueva palabra clave.
  • Usamos corchetes para especificar la cantidad de elementos que se almacenarán en la matriz dinámica.
  • Una vez hecho esto con la matriz, podemos liberar la memoria usando el operador de eliminación.
  • Utilice el operador de eliminación con [] para liberar la memoria de todos los elementos de la matriz.
  • Una eliminación sin [] libera la memoria de un solo elemento.
  • No hay ningún mecanismo integrado para cambiar el tamaño de las matrices de C ++.
  • Para inicializar una matriz usando un inicializador de lista, no usamos el operador .