Prerrequisito: Array Basics
En C / C++ , arreglos multidimensionales en palabras simples como un arreglo de arreglos. Los datos en arrays multidimensionales se almacenan en forma tabular (en orden de fila principal). A continuación se muestra la forma general de declarar arrays N-dimensionales :
Sintaxis de una array multidimensional :
tipo_datos nombre_array[tamaño1][tamaño2]….[tamañoN];
data_type: tipo de datos que se almacenarán en la array.
Aquí data_type es válido C/C++ tipo de datos
array_name: Nombre de la array
size1, size2, …, sizeN: Tamaños de las dimensiones
Los arreglos 2D son arreglos de arreglos unidimensionales.
Sintaxis de una array 2D :
tipo_datos nombre_arreglo[x][y];
data_type: Tipo de dato a almacenar. Tipo de datos C/C++ válido.
A continuación se muestra la representación esquemática de arrays 2D:
Para obtener más detalles sobre arrays multidimensionales y 2D, consulte el artículo Arreglos multidimensionales en C++ .
Problema: dada una array 2D, la tarea es asignar memoria dinámicamente para una array 2D usando new en C++ .
Solución: La siguiente array 2D se declara con 3 filas y 4 columnas con los siguientes valores:
1 2 3 4 5 6 7 8 9 10 11 12
Nota: Aquí M es el número de filas y N es el número de columnas.
Método 1: usar un solo puntero : en este método, se asigna un bloque de memoria de tamaño M*N y luego se accede a los bloques de memoria usando aritmética de punteros . A continuación se muestra el programa para el mismo:
C++
// C++ program to dynamically allocate // the memory for 2D array in C++ // using new operator #include <iostream> using namespace std; // Driver Code int main() { // Dimensions of the 2D array int m = 3, n = 4, c = 0; // Declare a memory block of // size m*n int* arr = new int[m * n]; // Traverse the 2D array for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { // Assign values to // the memory block *(arr + i * n + j) = ++c; } } // Traverse the 2D array for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { // Print values of the // memory block cout << *(arr + i * n + j) << " "; } cout << endl; } //Delete the array created delete[] arr; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12
Método 2: usar una array de punteros : aquí se crea una array de punteros y luego a cada bloque de memoria. A continuación se muestra el diagrama para ilustrar el concepto:
A continuación se muestra el programa para el mismo:
C++
// C++ program to dynamically allocate // the memory for 3D array in C++ // using new operator #include <iostream> using namespace std; // Driver Code int main() { // Dimensions of the array int m = 3, n = 4, c = 0; // Declare memory block of size M int** a = new int*[m]; for (int i = 0; i < m; i++) { // Declare a memory block // of size n a[i] = new int[n]; } // Traverse the 2D array for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { // Assign values to the // memory blocks created a[i][j] = ++c; } } // Traverse the 2D array for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { // Print the values of // memory blocks created cout << a[i][j] << " "; } cout << endl; } //Delete the array created for(int i=0;i<m;i++) //To delete the inner arrays delete [] a[i]; delete [] a; //To delete the outer array //which contained the pointers //of all the inner arrays return 0; }
1 2 3 4 5 6 7 8 9 10 11 12
Publicación traducida automáticamente
Artículo escrito por shahbazalam75508 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA