開啟章節選單
三維陣列
普通二維陣列居然有不夠用的時候
在 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 了!
小測驗
C++ 最多可以宣告幾維陣列?