C++ Asignación dinámica de arreglos 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 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 que se haya llenado.
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.
En este tutorial de C++, aprenderá
- ¿Qué es una matriz dinámica?
- Factores que afectan el rendimiento de los arreglos dinámicos
- La nueva palabra clave
- Inicializar arreglos asignados dinámicamente
- Cambiar el tamaño de las matrices
- Eliminación dinámica de arreglos
Factores que afectan el rendimiento de los arreglos dinámicos
El tamaño inicial de la matriz y su factor de crecimiento determinan su rendimiento. Tenga en cuenta los siguientes puntos:
- Si una matriz tiene un tamaño pequeño y un factor de crecimiento pequeño, seguirá reasignando memoria con mayor frecuencia. Esto reducirá el rendimiento de la matriz.
- Si una matriz tiene un gran tamaño y un gran factor de crecimiento, 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 elementos que se asignarán se especifica entre corchetes. El nombre del tipo debe preceder a esto. Se asignará el número solicitado de elementos.
Sintaxis:
La nueva palabra clave adopta la siguiente sintaxis:
pointer_variable = new data_type;
pointer_variable es el nombre de la variable de puntero.
El tipo_datos debe ser un tipo de datos C++ válido.
A continuación, 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:
#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:
Aquí hay una captura de pantalla del código:
Explicación del código:
- Incluya el archivo de encabezado iostream en nuestro programa para usar sus funciones.
- Incluya el espacio de nombres std en nuestro programa para usar sus clases sin llamarlo.
- Llama a la función main(). La lógica del programa debe agregarse dentro del cuerpo de la función.
- Declare dos variables enteras x y n.
- Imprima un texto en la consola solicitando al usuario que ingrese el valor de la variable n.
- Lea la entrada del usuario desde el teclado y asígnela a la variable n.
- Declare una matriz para contener un total de n enteros y asígnela a la variable de puntero *arr.
- Imprime un mensaje solicitando al usuario que ingrese n cantidad de elementos.
- Use un ciclo for para crear una variable de ciclo x para iterar sobre los elementos ingresados por el usuario.
- Leer los elementos ingresados por el usuario y almacenarlos en la matriz arr.
- Fin del cuerpo del bucle for.
- Imprime algo de texto en la consola.
- Use un bucle for para crear una variable de bucle x para iterar sobre los elementos de la matriz.
- Imprima los valores contenidos en la matriz llamada arr en la consola.
- Fin del cuerpo del bucle for.
- El programa debe devolver valor al completarse con éxito.
- 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 .
Inicializar arreglos asignados 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. Dado que necesitamos inicializar la matriz a 0, debe dejarse vacío.
Podemos inicializar una matriz dinámica usando una lista de inicializadores. Vamos a crear 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:
Aquí hay una captura de pantalla del código:
Explicación del código:
- Incluya el archivo de encabezado iostream en nuestro programa para usar sus funciones.
- Incluya el espacio de nombres estándar en nuestro programa para usar sus clases sin llamarlo.
- Llama a la función main(). La lógica del programa debe agregarse dentro del cuerpo de la función.
- Declare una variable entera llamada x.
- Declare una matriz dinámica denominada matriz utilizando una lista de inicializadores. La matriz contendrá 5 elementos enteros. Tenga en cuenta que no hemos usado el operador "=" entre la longitud de la matriz y la lista de inicializadores.
- 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 oración.
- Use un bucle for para iterar sobre los elementos de la matriz.
- Imprima el contenido de la matriz denominada matriz en la consola.
- Fin del cuerpo del ciclo for.
- El programa debe devolver valor al completarse con éxito.
- Fin del cuerpo de la función main().
Cambio de tamaño de matrices
La longitud de una matriz dinámica se establece durante el tiempo de asignación.
Sin embargo, C++ no tiene un mecanismo integrado 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 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.
Eliminación dinámica de matrices
Una matriz dinámica debe eliminarse de la memoria de la computadora una vez que se cumple su propósito. La declaración de eliminación puede ayudarlo a lograr esto. El espacio de memoria liberado se puede usar 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.
Para eliminar una matriz dinámica de la memoria de la computadora, debe usar delete[], en lugar de delete. El [] indica a la CPU que elimine múltiples variables en lugar de una variable. El uso de delete en lugar de delete[] cuando se trata de una matriz dinámica puede generar problemas. Ejemplos de tales problemas incluyen fugas de memoria, corrupción de datos, bloqueos, 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:
Aquí hay una captura de pantalla del código:
Explicación del código:
- Incluya el archivo de encabezado iostream en nuestro programa para poder usar sus funciones.
- Incluya el espacio de nombres std en nuestro programa para usar sus clases sin llamarlo.
- Llama a la función main(). La lógica del programa debe agregarse dentro del cuerpo de la función.
- Declare dos variables x y n del tipo de datos entero.
- Imprime algo de texto en la consola. El texto le pedirá al usuario que indique la cantidad de números que ingresará.
- Lee la entrada del usuario desde el teclado. El valor de entrada se asignará a la variable n.
- Declare una variable de puntero *arr. La matriz arr reservará algo de memoria para almacenar un total de n enteros.
- Imprime un mensaje en la consola solicitando al usuario que ingrese n números.
- Cree un ciclo for y la variable de ciclo x para iterar sobre los números ingresados por el usuario.
- Leer los números ingresados por el usuario y almacenarlos en la matriz arr.
- Fin del cuerpo del ciclo for.
- Imprime algo de texto en la consola.
- Use un bucle for y la variable de bucle x para iterar sobre el contenido de la matriz arr.
- Imprima los valores de la matriz arr en la consola.
- Fin del cuerpo del ciclo for.
- Imprime una línea vacía en la consola.
- Libere la memoria de la matriz arr.
- El programa devolverá valor cuando se complete con éxito.
- 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 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 matrices dinámicas, el tamaño se determina durante el tiempo de ejecución.
- Los arreglos dinámicos en C++ se declaran usando la nueva palabra clave.
- Utilizamos corchetes para especificar la cantidad de elementos que se almacenarán en la matriz dinámica.
- Una vez que termine 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 un 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 "=".
Lenguaje C
- Matrices de C#
- Pasar matriz a una función en programación C++
- C Asignación de memoria dinámica
- Matrices en C++ | Declarar | Inicializar | Ejemplos de puntero a matriz
- Operadores en C++ con Ejemplo:Qué es, Tipos y Programas
- Declaración de caso de cambio de C ++ con EJEMPLO
- Estructura C++ con ejemplo
- Mapa en la biblioteca de plantillas estándar (STL) de C++ con ejemplo de impresión
- std::list en C++ con ejemplo
- Diferencia entre estructura y clase:explicada con el ejemplo de C++
- Clasificación de selección en el programa Java con ejemplo