Как динамически выделить 3D-массив в C ++
Предварительное условие: основы работы с массивами
В C / C ++ - многомерные массивы простыми словами как массив массивов. Данные в многомерных массивах хранятся в табличной форме (в порядке возрастания строк). Ниже представлена общая форма объявления N-мерных массивов :
Синтаксис многомерного массива :
data_type array_name[size1][size2]….[sizeN];
data_type: Type of data to be stored in the array.
Here data_type is valid C/C++ data type
array_name: Name of the array
size1, size2, …, sizeN: Sizes of the dimensions
Трехмерные массивы - это массивы двумерных массивов :
Синтаксис 3D-массива:
data_type array_name[x][y][z];
data_type: Type of data to be stored. Valid C/C++ data type.
Дополнительные сведения о многомерных и трехмерных массивах см. В статье «Многомерные массивы в C ++».
Проблема : учитывая трехмерный массив, задача состоит в том, чтобы динамически выделить память для трехмерного массива, используя новые возможности C ++.
Решение. В следующих методах используется подход к созданию двух двумерных массивов, и каждый двумерный массив имеет 3 строки и 4 столбца со следующими значениями.
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 of 2D arrays.
Y = No of rows of each 2D array.
Z = No of columns of each 2D array.
Метод 1: использование одного указателя - в этом методе выделяется блок памяти размером x * y * z, а затем доступ к блокам памяти осуществляется с использованием арифметики указателя. Ниже представлена программа для того же:
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