C++多維陣列



多維陣列

C++多維陣列是一個具有多個維度並允許您以網格狀結構儲存資料的陣列。您可以建立具有多個維度的陣列,但這裡我們將討論二維 (2D) 和三維 (3D) 陣列。

C++允許多維陣列。以下是多維陣列宣告的一般形式:

語法

以下是 C++ 中多維陣列的語法:

type name[size1][size2]...[sizeN];

示例

例如,以下宣告建立一個三維 5 x 10 x 4 的整數陣列:

int threedim[5][10][4];

二維陣列

多維陣列最簡單的形式是二維陣列。二維陣列本質上是一維陣列的列表。要宣告一個大小為 x 和 y 的二維整數陣列,您可以這樣寫:

type arrayName [ x ][ y ];

其中type可以是任何有效的C++資料型別,而arrayName將是一個有效的C++識別符號。

二維陣列可以看作一個表格,它將有 x 行和 y 列。包含三行四列的二維陣列a如下所示:

Two Dimensional Arrays

因此,陣列 a 中的每個元素都由一個名為a[i][j]的元素名標識,其中 a 是陣列的名稱,i 和 j 是唯一標識 a 中每個元素的下標。

初始化二維陣列

多維陣列可以透過為每一行指定帶括號的值來初始化。下面是一個有 3 行,每行有 4 列的陣列。

int a[3][4] = {  
   {0, 1, 2, 3} ,   /*  initializers for row indexed by 0 */
   {4, 5, 6, 7} ,   /*  initializers for row indexed by 1 */
   {8, 9, 10, 11}   /*  initializers for row indexed by 2 */
};

指示目標行的巢狀大括號是可選的。以下初始化與前面的示例等效:

int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};

訪問二維陣列元素

二維陣列中的元素是透過使用下標(即陣列的行索引和列索引)來訪問的。例如:

int val = a[2][3];

上面的語句將獲取陣列第 3 行的第 4 個元素。您可以在上圖中驗證它。

#include <iostream>
using namespace std;
 
int main () {
   // an array with 5 rows and 2 columns.
   int a[5][2] = { {0,0}, {1,2}, {2,4}, {3,6},{4,8}};
 
   // output each array element's value                      
   for ( int i = 0; i < 5; i++ )
      for ( int j = 0; j < 2; j++ ) {
      
         cout << "a[" << i << "][" << j << "]: ";
         cout << a[i][j]<< endl;
      }
 
   return 0;
}

當編譯並執行上述程式碼時,它會產生以下結果:

a[0][0]: 0
a[0][1]: 0
a[1][0]: 1
a[1][1]: 2
a[2][0]: 2
a[2][1]: 4
a[3][0]: 3
a[3][1]: 6
a[4][0]: 4
a[4][1]: 8

如上所述,您可以建立任意維度的陣列,儘管您建立的大多數陣列可能是一維或二維的。

三維陣列

類似地,C++ 中的三維 (3D) 陣列是二維陣列概念的擴充套件,增加了另一個維度。這使您可以訪問以三維空間儲存資料。您可以將其視覺化為一個立方體,其中每個元素都由三個索引標識,這些索引通常表示深度、行和列的維度。要宣告一個大小為 x、y 和 z 的三維整數陣列,您可以這樣寫:

type arrayName [ x ][ y ][z];

其中type可以是任何有效的C++資料型別,而arrayName將是一個有效的C++識別符號。

三維陣列可以被認為是相互堆疊的二維表格的集合,形成一個類似立方體的結構。

因此,陣列 a 中的每個元素都由一個名為 b[i][j][k] 的元素名標識,其中 a 是陣列的名稱,i、j 和 k 是唯一標識 b 中每個元素的下標。

初始化三維陣列

三維陣列可以透過為每一層、行和列指定帶括號的值來初始化。下面是一個具有 2 層、3 行和 4 列的 3D 陣列示例。

int b[2][3][4] = {  
  {  
    {0, 1, 2, 3},   /* Initializers for layer 0, row 0 */
    {4, 5, 6, 7},   /* Initializers for layer 0, row 1 */
    {8, 9, 10, 11}  /* Initializers for layer 0, row 2 */
  },
  {  
    {12, 13, 14, 15}, /* Initializers for layer 1, row 0 */
    {16, 17, 18, 19}, /* Initializers for layer 1, row 1 */
    {20, 21, 22, 23}  /* Initializers for layer 1, row 2 */
  }
};

在此初始化中,巢狀大括號用於每一組值的預期層和行。

扁平初始化

或者,您還可以初始化一個不帶巢狀大括號的三維陣列。此方法將陣列視為單個連續的值塊。這是一個示例

int b[2][3][4] = {0, 1, 2, 3, 
  4, 5, 6, 7, 
  8, 9, 10, 11, 
  12, 13, 14, 15, 
  16, 17, 18, 19, 
  20, 21, 22, 23};

在這種情況下,值以扁平的格式列出。這兩種初始化方法都是有效的,併產生相同的陣列結構。

訪問三維陣列元素

三維陣列中的元素是透過使用三個下標來訪問的,即層索引、行索引和列索引。例如:

int val = b[1][2][3];

在上語句中,val將獲取陣列 b 的第 2 層中第 3 行的第 4 個元素。

以下是索引的工作方式:

  • 第一個索引 (1) 指定陣列的層 (或深度)。
  • 第二個索引 (2) 指定該層內的行。
  • 第三個索引 (3) 指定該行內的列。

因此,由 b[1][2][3] 訪問的元素對應於位於陣列第 1 層、第 2 行和第 3 列的值。您可以透過考慮資料如何在立方體格式中結構化來將其視覺化,其中每個座標都指向該 3D 空間內的特定元素。

示例

這是給出的程式碼:

#include <iostream>
using namespace std;

int main() {
  // An array with 2 layers, 3 rows, and 4 columns.
  int b[2][3][4] = {{
                        {0, 1, 2, 3},   // Layer 0, Row 0
                        {4, 5, 6, 7},   // Layer 0, Row 1
                        {8, 9, 10, 11}  // Layer 0, Row 2
                    },
                    {
                        {12, 13, 14, 15},  // Layer 1, Row 0
                        {16, 17, 18, 19},  // Layer 1, Row 1
                        {20, 21, 22, 23}   // Layer 1, Row 2
                    }};

  // Output each array element's value
  for (int i = 0; i < 2; i++) {      // Iterating through layers
    for (int j = 0; j < 3; j++) {    // Iterating through rows
      for (int k = 0; k < 4; k++) {  // Iterating through columns
        cout << "b[" << i << "][" << j << "][" << k << "]: ";
        cout << b[i][j][k] << endl;
      }
    }
  }

  return 0;
}

當編譯並執行上述程式碼時,它會產生以下結果:

b[0][0][0]: 0
b[0][0][1]: 1
b[0][0][2]: 2
b[0][0][3]: 3
b[0][1][0]: 4
b[0][1][1]: 5
b[0][1][2]: 6
b[0][1][3]: 7
b[0][2][0]: 8
b[0][2][1]: 9
b[0][2][2]: 10
b[0][2][3]: 11
b[1][0][0]: 12
b[1][0][1]: 13
b[1][0][2]: 14
b[1][0][3]: 15
b[1][1][0]: 16
b[1][1][1]: 17
b[1][1][2]: 18
b[1][1][3]: 19
b[1][2][0]: 20
b[1][2][1]: 21
b[1][2][2]: 22
b[1][2][3]: 23

上述程式碼有效地演示瞭如何在 C++ 中使用三維陣列。

廣告