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

¿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 de DynamArray ocupan un bloque de memoria contiguo.

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

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

Factores que afectan el rendimiento de los arreglos dinámicos

El tamaño inicial del conjunto y su factor de crecimiento determinan su rendimiento. Tenga en cuenta lo siguientewing 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 no utilizada. 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 elementos que se asignarán se especifica dentro de un par de cuadrados. brackets. El nombre del tipo debe preceder a esto. Se asignará el número de artículos solicitado.

Sintaxis

La nueva palabra clave toma el siguientewing sintaxis:

pointer_variable = new data_type;

La variable_puntero es el nombre del variable de puntero.

El tipo_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 eliminar.

Ejemplo 1:

#include<iostream>
using 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;
}

Salida:

La nueva palabra clave

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

La nueva palabra clave

Explicación del código:

  1. Incluya el archivo de encabezado iostream en nuestro programa para usar su funciones.
  2. Incluya el espacio de nombres estándar en nuestro programa para poder usar sus clases sin llamarlo.
  3. Llame a la función principal(). 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 n número de elementos.
  9. Utilice 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 la matriz arr.
  11. Fin del cuerpo del en bucle.
  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..

Inicializando 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 indica la cantidad de elementos que se agregarán a la matriz. Como 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 <iostream>
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;
}

Salida:

Inicializando matrices asignadas dinámicamente

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

Inicializando matrices asignadas dinámicamente

Explicación del código:

  1. Incluya el archivo de encabezado iostream en nuestro programa para usar sus funciones.
  2. Incluya el espacio de nombres estándar en nuestro programa para usar sus clases sin llamarlo.
  3. Llame a la función principal(). 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 llamada matriz usando 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. endl es una palabra clave de C++ que significa línea final. Mueve el cursor a la siguiente frase.
  7. Utilice un bucle for para iterar sobre los elementos de la matriz.
  8. Imprime 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, puedes superar este desafío asignando una nueva matriz dinámicamente, copiando los elementos y luego borrando la matriz anterior.

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

Eliminar matrices dinámicamente

Una matriz dinámica debe eliminarse de la memoria de la computadora una vez que se haya cumplido su propósito. La declaración de eliminación puede ayudarle 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, fallas, etc.

Ejemplo 3:

#include<iostream>
using 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;
}

Salida:

Eliminar matrices dinámicamente

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

Eliminar matrices dinámicamente

Explicación del código:

  1. Incluya el archivo de encabezado iostream en nuestro programa para poder utilizar sus funciones.
  2. Incluya el espacio de nombres estándar en nuestro programa para poder usar sus clases sin llamarlo.
  3. Llame a la función principal(). 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 entero.
  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. Declarar una variable de puntero *arr. La matriz arr reservará algo de memoria para almacenar un total de n números enteros.
  8. Imprima un mensaje en la consola solicitando al usuario que ingrese n números.
  9. Cree un bucle for y la variable de bucle x para iterar sobre los números ingresados ​​por el usuario.
  10. Lea los números ingresados ​​por el usuario y guárdelos 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. Libere la memoria del arreglo de matriz.
  18. El programa devolverá un valor cuando se complete correctamente.
  19. Fin del cuerpo de la función main().

Resumen

  • Las matrices regulares tienen un tamaño fijo. No se puede modificar su tamaño una vez declarado.
  • Con este tipo 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 las 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 cuadrado brackets para especificar el número de elementos que se almacenarán en la matriz dinámica.
  • Una vez que hayamos terminado 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 existe 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 "=".