Saltar al contenido

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

¿Qué es una matriz dinámica?

Una matriz dinámica es muy similar a una matriz normal, pero su tamaño es variable durante el tiempo de ejecución del programa. Los elementos DynamArray están en un bloque de memoria táctil.

Una vez que se crea una matriz, no se puede cambiar su tamaño. Sin embargo, una matriz dinámica es diferente. Una matriz dinámica puede expandirse en tamaño incluso después de llenarse.

Al crear una matriz, se le asigna una cantidad predeterminada de memoria. Este no es el caso de una matriz dinámica porque aumenta la cantidad de memoria en un cierto factor cuando es necesario.

En este tutorial de C ++, aprenderá

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 pueden tardar más. Esto reducirá el rendimiento de la matriz.

La nueva palabra clave

IC ++, podemos crear una matriz dinámica usando la nueva palabra clave. El número de bienes que se asignarán se especifica dentro de un par de corchetes. Debe ir precedido del nombre de la variedad. Se asignará el número de artículos solicitados.

Sintaxis:

La nueva palabra clave asume 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.

A continuación, la palabra clave devuelve un puntero al primer artículo. Después de crear la matriz dinámica, podemos eliminarla usando la palabra clave delete.

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;
}

Producción:

Aquí hay una imagen del código:

Explicación del Código:

  1. Incluya el archivo de encabezado iostream en nuestro programa para usar sus funciones.
  2. Incluya el nombre de espacio 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. Imprime un texto en la consola implorando al usuario el valor de la variable de la entrada.
  6. Lea la entrada del usuario desde el teclado y asígnela a la variable n.
  7. Confirme que la matriz contenga enteros enteros y asígnela a una variable de puntero * arr.
  8. Imprima un mensaje instando al usuario a ingresar el número de artículos.
  9. Use un bucle de bucle para crear una variable de bucle xa para imitar los elementos ingresados ​​por el usuario.
  10. Lea los elementos ingresados ​​por el usuario y guárdelos en la matriz.
  11. El extremo del cuerpo del bucle.
  12. Imprime texto en la consola.
  13. Utilice un bucle de bucle para crear una variable de bucle xa para repetir los elementos de la matriz.
  14. Imprima los valores de la matriz denominada arr en la consola.
  15. El extremo del cuerpo del bucle.
  16. El programa debe devolver valor una vez completado con éxito.
  17. El final del cuerpo de la función principal ().

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..

Iniciar matrices asignadas dinámicamente

Es fácil iniciar una matriz dinámica en 0.

Sintaxis:


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

En la sintaxis anterior, la longitud representa el número de elementos que se agregarán a la matriz. Como necesitamos comenzar la matriz en 0, esto debe dejarse en blanco.

Podemos iniciar una matriz dinámica usando una lista de lanzadores. Creamos un ejemplo que ilustra 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;
}

Producción:

Aquí hay una imagen del código:

Explicación del Código:

  1. Incluya el archivo de encabezado iostream en nuestro programa para usar sus funciones.
  2. Incluya el nombre de espacio 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 xa.
  5. Confirme la matriz dinámica denominada matriz utilizando la lista de iniciadores. La matriz tendrá 5 elementos enteros. Tenga en cuenta que no usamos el operador “=” entre la longitud de la matriz y la lista del lanzador.
  6. Imprime 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 para repetir los elementos de la matriz.
  8. Imprima el contenido de la matriz de matriz nombrada en la consola.
  9. El extremo del cuerpo del bucle.
  10. El programa debe devolver valor una vez completado con éxito.
  11. El final del cuerpo de la función principal ().

Cambia cambia

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

Sin embargo, C ++ no tiene un mecanismo integrado para cambiar una matriz una vez asignada.

Sin embargo, puede superar este desafío asignando dinámicamente una nueva matriz, copiando los elementos y luego eliminando la matriz anterior.

Nota: esta técnica es propensa a errores, así que trate de evitarla.

Eliminar matrices dinámicamente

Una matriz dinámica debe borrarse de la memoria de la computadora tan pronto como 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 tan pronto como expire el programa.

Nota:

Para eliminar una matriz dinámica de la memoria de la computadora, debe usar eliminar[], en lugar de eliminarlo. El es [] la CPU recibe instrucciones de eliminar varias variables en lugar de una sola variable. Utilice eliminar en lugar de eliminar[] cuando se trata de un conjunto dinámico, puede haber problemas. Ejemplos de tales problemas incluyen pérdida 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;
}

Producción:

Aquí hay una imagen 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 nombre de espacio 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 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. Confirmar la variable de puntero * arr. La matriz retendrá algo de memoria para almacenar enteros enteros.
  8. Imprime un mensaje en la consola pidiendo al usuario que ingrese números.
  9. Cree un bucle de bucle y la variable de bucle x para repetir los números ingresados ​​por el usuario.
  10. Lea los números ingresados ​​por el usuario y guárdelos en la matriz.
  11. El extremo del cuerpo del bucle.
  12. Imprime texto en la consola.
  13. Utilice un bucle de bucle y la variable de bucle x para simular el contenido de una matriz de matriz.
  14. Imprima los valores de la matriz de matriz en la consola.
  15. El extremo del cuerpo del bucle.
  16. Imprime una línea vacía en la consola.
  17. Libere la memoria de la matriz de matrices.
  18. El programa devolverá un valor una vez completado con éxito.
  19. El final del cuerpo de la función principal ().

Resumen: