二維陣列居然有不夠用的時候#
在 C++ 中,陣列可以有一維、二維,甚至是三維或更高維度。三維陣列可以被視為由多個二維陣列組成的結構,常用於表示立體數據,例如三維空間坐標、魔術方塊的顏色等等,在往後的動態規劃章節中甚至可以用來儲存 3 種不同條件變更下的某種變數值(敬請期待)。
定義三維陣列#
跟宣告二維陣列相似,宣告三維陣列的語法如下:
// 可嘗試類推更高維的陣列要怎麼宣告!
資料類型 陣列名稱[X][Y][Z];
其中:
X表示第一維度的大小Y表示第二維度的大小Z表示第三維度的大小
例如定義一個大小為 2 x 3 x 4 的整數三維陣列:
int arr[2][3][4];
三維陣列的初始化#
一種非常古老的初始化方式如下:
int arr[2][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}
}
};
// 一樣可嘗試類推更高維的陣列要怎麼初始化!
如果你想用迴圈賦值,那麼恭喜你,你一定有吸收上一章節所述 d(`・∀・)b
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
for (int k = 0; k < 4; k++) {
arr[i][j][k] = 12 * i + 4 * j + k + 1;
}
}
}
注意
隨著維度的增加,陣列所占用的空間會快速增長,因此在使用高維陣列時要權衡空間和時間的開銷。
存取 / 修改三維陣列#
存取三維陣列的方式也很簡單,只要透過三個中括號就可以了。第一個表示第一維度,第二個表示第二維度,第三個表示第三維度。
int arr[2][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}
}
};
cout << arr[0][0][0] << endl; // 1
cout << arr[0][1][2] << endl; // 7
cout << arr[1][2][3] << endl; // 24
arr[0][0][0] = 100;
cout << arr[0][0][0] << endl; // 100
三維的 Vector#
上個章節我們提過了用 vector 來宣告二維陣列,當然也可以用來宣告三維或更高維的陣列。三維 vector 的宣告方式如下:
vector<vector<vector<int>>> arr(2, vector<vector<int>>(3, vector<int>(4, 0)));
這樣就可以宣告一個大小為 2 x 3 x 4 的三維 vector 了!
