C++ 多维数组
在本教程中,我们将学习 C++ 中的多维数组。更具体地说,如何在我们的程序中声明、访问和有效地使用它们。
在 C++中,我们可以创建一个数组的数组,称为多维数组。例如:
int x[3][4];
这里, x
是一个二维数组。它最多可以容纳 12 个元素。
我们可以把这个数组想象成一个有 3 行的表,每行有 4 列,如下所示。
三维数组也以类似的方式工作。例如:
float x[2][4][3];
这个数组 x
最多可容纳 24 个元素。
我们可以通过简单地乘以数组的维度来找出数组中元素的总数: 2 * 4 * 3 = 24
。
多维数组初始化
与普通数组一样,我们可以通过多种方式初始化多维数组。
二维数组的初始化
int test[2][3] = {2, 4, 5, 9, 0, 19};
上述方法不是优选的。下面给出了使用相同数组元素初始化此数组的更好方法:
int test[2][3] = { {2, 4, 5}, {9, 0, 19}};
这个数组有 2 行 3 列,这就是为什么我们有两行元素,每行 3 个元素。
三维数组的初始化
int test[2][3][4] = {
3, 4, 2, 3, 0, -3, 9, 11, 23, 12, 23,
2, 13, 4, 56, 3, 5, 9, 3, 5, 5, 1, 4, 9
};
这不是初始化三维数组的好方法。初始化此数组的更好方法是:
int test[2][3][4] = {
{ {3, 4, 2, 3}, {0, -3, 9, 11}, {23, 12, 23, 2} },
{ {13, 4, 56, 3}, {5, 9, 3, 5}, {5, 1, 4, 9} }
};
注意这个三维数组的维度。
第一个维度的值为 2
。因此,构成第一维的两个元素是:
- 元素 1 =
{ {3, 4, 2, 3}, {0, -3, 9, 11}, {23, 12, 23, 2} }
- 元素 2 =
{ {13, 4, 56, 3}, {5, 9, 3, 5}, {5, 1, 4, 9} }
第二个维度的值为 3
。请注意,第一个维度的每个元素都有三个元素:
- 元素 1 中有 3 个子元素
{3, 4, 2, 3}
,{0, -3, 9, 11}
和{23, 12, 23, 2}
。 - 元素 2 中有 3 个子元素
{13, 4, 56, 3}
,{5, 9, 3, 5}
和{5, 1, 4, 9}
。
最后,第二维的每个元素内部都有四个 int
类型的数字:
3, 4, 2, 3
0, -3, 9, 11
23, 12, 23, 2
13, 4, 56, 3
5, 9, 3, 5
5, 1, 4, 9
示例 1:二维数组
本示例展示了遍历输出 C++ 中二维数组中的所有元素的方法。
#include <iostream>
using namespace std;
int main() {
int test[3][2] = {{2, -5},
{4, 0},
{9, 1}};
// 遍历第一维
for (int i = 0; i < 3; ++i) {
// 遍历第二维
for (int j = 0; j < 2; ++j) {
cout << "test[" << i << "][" << j << "] = " << test[i][j] << endl;
}
}
return 0;
}
输出
test[0][0] = 2
test[0][1] = -5
test[1][0] = 4
test[1][1] = 0
test[2][0] = 9
test[2][1] = 1
在上面的例子中,我们初始化了一个名为 test
的 int
二维数组,它有 3 个“行”和 2 个“列”。
在这里,我们使用了嵌套 for
循环来显示数组元素。
- 外部循环从
i == 0
到i == 2
用于访问数组的行 - 内部循环从
j == 0
到j == 1
用于访问数组的列
最后,我们在每次迭代中打印数组元素。
示例 2:获取二维数组的输入
本示例展示了在 C++ 中如何获取用户的输入并保存到二维数组中。
#include <iostream>
using namespace std;
int main() {
int numbers[2][3];
cout << "Enter 6 numbers: " << endl;
// Storing user input in the array
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 3; ++j) {
cin >> numbers[i][j];
}
}
cout << "The numbers are: " << endl;
// Printing array elements
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 3; ++j) {
cout << "numbers[" << i << "][" << j << "]: " << numbers[i][j] << endl;
}
}
return 0;
}
输出
Enter 6 numbers:
1
2
3
4
5
6
The numbers are:
numbers[0][0]: 1
numbers[0][1]: 2
numbers[0][2]: 3
numbers[1][0]: 4
numbers[1][1]: 5
numbers[1][2]: 6
在这里,我们使用了一个嵌套 for
循环来获取二维数组的输入。获取所有输入后,我们使用另一个嵌套 for
循环来打印数组成员。
示例 3:三维数组
本示例展示了遍历输出 C++ 中三维数组中的所有元素的方法。
#include <iostream>
using namespace std;
int main() {
// 三维数组
int test[2][3][2] = {
{
{1, 2},
{3, 4},
{5, 6}
},
{
{7, 8},
{9, 10},
{11, 12}
}
};
// 遍历数组
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] = 1
test[0][0][1] = 2
test[0][1][0] = 3
test[0][1][1] = 4
test[0][2][0] = 5
test[0][2][1] = 6
test[1][0][0] = 7
test[1][0][1] = 8
test[1][1][0] = 9
test[1][1][1] = 10
test[1][2][0] = 11
test[1][2][1] = 12
打印三维数组元素的方法类似于二维数组。
但是,由于我们要操作 3 个维度,因此我们使用嵌套的 for 循环,总共有 3 个循环:
- 外部循环从
i == 0
toi == 1
访问数组的第一维 - 中间循环从
j == 0
toj == 2
访问数组的第二维 - 内部循环从
k == 0
tok == 1
访问数组的第三维
我们可以看到,数组的复杂度随着维度的增加呈指数增长。
结论
多维数组可以简单理解为数组的数组,即多维数组的元素还是数组。