Cómo asignar dinámicamente una array 3D en C++

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;
}
Producción: 

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;
}
Producción: 

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *