三維陣列

普通

二維陣列居然有不夠用的時候

在 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++ 最多可以宣告幾維陣列?