C++ 多维数组
多维数组
C++ 多维数组是一种数组,它具有多个维度,并允许您以网格状结构存储数据。您可以创建多维数组,但这里我们将讨论二维 (2D) 和三维 (3D) 数组。
C++ 支持多维数组。以下是多维数组声明的一般形式 -
语法
以下是 C++ 中多维数组的语法:
type name[size1][size2]...[sizeN];
示例
例如,以下声明创建了一个大小为 5、10、4 的三维整数数组 -
int threedim[5][10][4];
二维数组
多维数组最简单的形式是二维数组。二维数组本质上是一维数组的列表。要声明一个大小为 x 和 y 的二维整数数组,您可以编写如下代码 -
type arrayName [ x ][ y ];
其中 type 可以是任何有效的 C++ 数据类型,arrayName 是有效的 C++ 标识符。
二维数组可以被认为是一个表,它有 x 行和 y 列。二维数组 a 包含三行四列,如下所示 -

因此,数组 a 中的每个元素都由 a[ i ][ j ] 形式的元素名称标识,其中 a 是数组名称,i 和 j 是唯一标识 a 中每个元素的下标。
初始化二维数组
可以通过为每一行指定括号中的值来初始化多维数组。以下是一个包含 3 行、每行 4 列的数组。
int a[3][4] = { {0, 1, 2, 3} , /* 索引为 0 的行的初始化器 */ {4, 5, 6, 7} , /* 索引为 1 的行的初始化器 */ {8, 9, 10, 11} /* 索引为 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 () { // 一个 5 行 2 列的数组。 int a[5][2] = { {0,0}, {1,2}, {2,4}, {3,6},{4,8}}; // 输出每个数组元素的值 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 列的三维数组的示例。
int b[2][3][4] = { { {0, 1, 2, 3}, /* 第 0 层,第 0 行的初始化器 */ {4, 5, 6, 7}, /* 第 0 层,第 1 行的初始化器 */ {8, 9, 10, 11} /* 第 0 层,第 2 行的初始化器 */ }, { {12, 13, 14, 15}, /* 第 1 层,第 0 行的初始化器 */ {16, 17, 18, 19}, /* 第 1 层,第 1 行的初始化器 */ {20, 21, 22, 23} /* 第 1 层,第 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 的第二层第三行开始获取第 4 个元素。
索引的工作原理如下:
- 第一个索引 (1) 指定数组的层(或深度)。
- 第二个索引 (2) 指定该层中的行。
- 第三个索引 (3) 指定该行中的列。
因此,b[1][2][3] 访问的元素对应于位于数组第一层、第二行和第三列的值。您可以通过思考数据如何以立方体格式构建来实现这一点,其中每个坐标指向该三维空间内的特定元素。
示例
以下是一段代码:
#include <iostream> using namespace std; int main() { // 一个包含 2 层、3 行、4 列的数组。 int b[2][3][4] = {{ {0, 1, 2, 3}, // 第 0 层,第 0 行 {4, 5, 6, 7}, // 第 0 层,第 1 行 {8, 9, 10, 11} // 第 0 层,第 2 行 }, { {12, 13, 14, 15}, // 第 1 层,第 0 行 {16, 17, 18, 19}, // 第 1 层,第 1 行 {20, 21, 22, 23} // 第 1 层,第 2 行 }}; // 输出每个数组元素的值 for (int i = 0; i < 2; i++) { // 遍历各层 for (int j = 0; j < 3; j++) { // 遍历行 for (int k = 0; k < 4; k++) { // 遍历列 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++ 中处理三维数组。