То, что вы хотите, частично достижимо с помощью ключевого слова new
, но не совсем так, как вы думаете. Для трехмерного массива все элементы должны иметь первое измерение одинакового размера. Кроме того, каждый 2D-массив в нем должен иметь одинаковый размер строки.
3D-массив - это не что иное, как массив массивов массивов или, более того, массив матриц.
Пусть наш 3D массив будет
Это может выглядеть так:
A = [[[y1_x1,y1_x2],[y2_x1,y2_x2]],[[y3_x1,y3_x2,],[y4_x1,y4_x2]]]
Это два элемента A[0]
и A[1]
Внутри каждого есть два других элемента A[0][0], A[0][1]
и A[1][0], A[1][1]
Эти четыре элемента содержат в себе два других элемента:
A[0][0][0]// which is y1_x1
A[0][0][1]// which is y1_x2
A[1][1][0]// which is y2_x1
A[1][1][1]// which is y2_x2
A[1][0][0]// which is y3_x1
A[1][0][1]// which is y3_x2
A[1][1][0]// which is y4_x1
A[1][1][1]// which is y4_x2
Теперь представьте, что один из элементов из A [0] и A [1] может быть матрицей, а другой - просто одним значением, например:
A = [[[y1_x1,y1_x2],[y2_x1,y2_x1]],y3]
Существует 4 способа обращения к A [0] и только 1 способ обращения к A [1]
Это также может иметь место во втором измерении:
A = [[[y1_x1,y1_x2],],y2], y3]
Есть два способа обратиться к A [0] [0], но только 1 для A [0] [1].
Вы можете создать массив массивов указателей, каждый из этих указателей ссылается на массив.
int ***z;
z = new int**[z-size];
z[0] = new int*[y-size];
z[1] = new int*[y-size];
...
z[0][0] = new int[x-size];
z[0][1] = new int[x-size]
Этот процесс, конечно, можно упростить с помощью цикла for
, если размеры одинаковы