本教程将教您如何在 C++ 中使用多维数组,特别是如何声明、访问和有效地利用它们。
当一个数组具有多个维度时,它就被称为多维数组。它是一个由其他数组组成的多级数组。二维数组,也称为二维数组,是最基础的多维数组。 矩阵或具有行和列的表也是二维数组的其他名称。
在 C++ 中,多维数组也称为矩形数组。它可以是二维或三维的。数据以表格格式(行 * 列)存储,也称为矩阵。
我们可以通过创建数组的数组来在 C++ 中创建多维数组。
N 维数组声明在其最通用的形式是
data_type array_ name[size1][size2]...[sizeN];
二维数组:int two_d[30][40];
三维数组:int three_d[50][60][70];
例如:int x[2][5];
在这种情况下,x 是一个二维数组。它最多可以容纳 10 个元素。
通过简单地将数组的维度相乘,我们可以确定总共有多少个元素。在上面的示例中,总共有 10 个元素,这只是通过将其维度相乘得到的。

多维数组最简单地可以表示为二维数组。二维数组就像矩阵一样,由行和列组成。本质上,一维数组的列表构成了一个二维数组。为了声明一个大小为x,y的二维整数数组,语法如下
type arrayName [ x ][ y ];
其中 type 可以是任何有效的 C++ 数据类型,而 arrayName 则是一个有效的 C++ 标识符
具有x行和y列的表可以被视为二维数组。下面展示了一个具有3 行和4 列的二维数组。

这里,该表是一个二维数组,在 3 行 4 列中包含 12 个整数值。在声明二维数组时,行大小和列大小都必须用方括号括起来。
由于 a 是数组的名称,而 i 和 j 是下标,它们分别标识数组中的每个元素,因此 a 中的每个元素都由形式为 a[i][j] 的元素名称标识。
二维数组的初始化有两种过程。
如前所述,初始化可以在声明期间完成,其形式为
data_type array_name [row] [column]= {value_1st_element,value_2nd_element,3rd.....};
例如,
int table [2] [3]={
{10,20,30};
{40,50,60};
}
同样可以在一行中定义,这更方便易用。
int table[2][3]={10,20,30,40,50,60};
C++ 提供了一种声明数组的方法,即让第一个索引(行)留空,而必须指定第二个索引(列)。下面的示例表明,在二维数组 table 中,行大小留空,而提供了列大小。
int table[][3]={10,20,30,40,50,60};
编译器不会引发任何错误,因为此语句有效,意味着 C++ 中可以初始化任意数量的行。但是,如果未指定列大小,编译器将引发错误。
int table[][3] // 有效
int table[3][] // 无效
初始化后的二维数组可以最好地可视化如下。

我们可以通过 cin 函数来实现二维数组的运行时初始化。通过检查以下程序可以查看这一点。
#include <iostream>
using namespace std;
int main()
{
int i, j, r, c;
int M[5][5];
cout <<"Enter number of rows : ";
cin >>r;
cout <<"Enter number of columns :";
cin >>c;
cout <<"\n";
/* Input data to matrix */
for (i = 0; i < r; i++)
{
for (j = 0; j < c; j++)
{
cout <<"Data in M[" << i <<"]" <<"[" << j <<"] = ";
cin >>M[i][j];
}
cout <<"\n";
}
/* Display the matrix */
for (i = 0; i < r; i++)
{
for (j = 0; j < c; j++)
{
cout <<M[i][j];
cout << " " ;
}
cout <<"\n";
}
return 0;
}
输出
Enter number of rows : 2 Enter number of columns :2 Data in M[0][0] = 4 Data in M[0][1] = 5 Data in M[1][0] = 2 Data in M[1][1] = 6 4 5 2 6
此程序为您提供了二维数组的清晰图景。数组 M[2][2] 包含 4 个元素,2 行 2 列。由于程序是为了显示一个 2 x 2 矩阵,因此行数和列数均指定为 2。接下来为每个位置分配元素,最后使用 cout 函数和 嵌套 for 循环显示矩阵。
下标,即数组的行索引和列索引,用于访问二维数组中的元素。
例如,
int val = a[2][3];
上面的语句将从数组的第三行获取第四个元素。
#include <iostream>
using namespace std;
int main () {
// this ia 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++ 编程中,我们可以处理具有多个维度的数组。3 维数组的语法是
data_type array_name [row][column][pages]= {value_1st_element,value_2nd_element,3rd.....};
例如,
int arr[10][10][10];
此数组将在编译器内存中分配 10X10X10=1000 个元素。
3D 数组可以如下所示。

三维数组的初始化与二维数组非常相似。请观察下面的示例
int test[3][3][3] = {
{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}},
{{10, 11, 12}, {13, 14, 15}, {16, 17, 18}},
{{19, 20, 21}, {22, 23, 24}, {25, 26, 27}}
};
这可以像下面这样展开。

让我们来看一个三维数组的例子
int test[2][3][4] = { 0, -3, 9, 11,3, 4, 2, 3, 13, 4, 56, 3,23, 12, 23, 2, 5, 9, 3, 5, 5, 1, 4, 9};
以下是初始化三维数组的更好方法
int test[2][3][4] = {
{ {0, -3, 9, 11}, {3, 4, 2, 3}, {13, 4, 56, 3} },
{{23, 12, 23, 2}, {5, 9, 3, 5}, {5, 1, 4, 9} }
};
请注意三维数组的维度。



int 数字。
#include <iostream>
using namespace std;
int main() {
// This array have the capacity to store upto 12 elements (2x3x2)
int test[2][3][2] = {
{
{11, 12},
{13, 14},
{15, 16}
},
{
{17, 18},
{19, 20},
{21, 22}
}
};
// Displaying the values with proper index.
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 3; ++j) {
for (int k = 0; k < 2; ++k) {
cout << "test[" << i << "][" << j << "][" << k << "] = " << test[i][j][k] << endl;
}
}
}
return 0;
}
输出
test[0][0][0] = 11 test[0][0][1] = 12 test[0][1][0] = 13 test[0][1][1] = 14 test[0][2][0] = 15 test[0][2][1] = 16 test[1][0][0] = 17 test[1][0][1] = 18 test[1][1][0] = 19 test[1][1][1] = 20 test[1][2][0] = 21 test[1][2][1] = 22
然而,由于我们操作的是三个维度,所以我们使用嵌套 for 循环,总共有三个循环,而不是两个。
正如我们所见,随着维度的增加,数组的复杂性呈指数级增长。
好处包括能够使用单个名称表示同一类型的多个数据项。
它可用于创建其他数据结构,如链表、堆栈、队列、树、图等。