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
Las arrays 3-D son una array de arrays de doble dimensión :
Sintaxis de una array 3D:
tipo_datos nombre_arreglo[x][y][z];
data_type: Tipo de dato a almacenar. Tipo de datos C/C++ válido.
Para obtener más detalles sobre arrays multidimensionales y 3D, consulte el artículo Arrays multidimensionales en C++ .
Problema : Dada una array 3D, la tarea es asignar memoria dinámicamente para una array 3D usando new en C++.
Solución: en los siguientes métodos, el enfoque utilizado es crear dos arrays 2D y cada array 2D tiene 3 filas y 4 columnas con los siguientes valores.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
X = No de arreglos 2D.
Y = No de filas de cada array 2D.
Z = No de columnas de cada array 2D.
Método 1: usar un solo puntero : en este método, se asigna un bloque de memoria de tamaño x*y*z 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 3D array in C++ // using new operator #include <iostream> using namespace std; // Driver Code int main() { // Dimensions of the 3D array int x = 2, y = 3, z = 4; int count = 0; // Allocate memory blocks // of size x*y*z int* a = new int[x * y * z]; // Traverse the 3D array for (int i = 0; i < x; i++) { for (int j = 0; j < y; j++) { for (int k = 0; k < z; k++) { // Assign values to the // memory blocks created *(a + i * y * z + j * z + k) = ++count; } } } // Traverse the 3D array again for (int i = 0; i < x; i++) { for (int j = 0; j < y; j++) { for (int k = 0; k < z; k++) { // Print values of the // memory blocks created cout << *(a + i * y * z + j * z + k) << " "; } cout << endl; } cout << endl; } // Deallocate memory delete[] a; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Método 2: usando el puntero triple : 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 3D array int x = 2, y = 3, z = 4; int count = 0; // Allocate memory blocks of size // x i.e., no of 2D Arrays int*** a = new int**[x]; for (int i = 0; i < x; i++) { // Allocate memory blocks for // rows of each 2D array a[i] = new int*[y]; for (int j = 0; j < y; j++) { // Allocate memory blocks for // columns of each 2D array a[i][j] = new int[z]; } } for (int i = 0; i < x; i++) { for (int j = 0; j < y; j++) { for (int k = 0; k < z; k++) { // Assign values to the // memory blocks created a[i][j][k] = ++count; } } } for (int i = 0; i < x; i++) { for (int j = 0; j < y; j++) { for (int k = 0; k < z; k++) { // Print values of the // memory blocks created cout << a[i][j][k] << " "; } cout << endl; } cout << endl; } // Deallocate memory for (int i = 0; i < x; i++) { for (int j = 0; j < y; j++) { delete[] a[i][j]; } delete[] a[i]; } delete[] a; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Publicación traducida automáticamente
Artículo escrito por shahbazalam75508 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA