C++ 多维数组
多维数组
多维数组就是数组的数组。
要声明一个多维数组,请定义变量类型,指定数组名称,后跟方括号,方括号内指定主数组有多少个元素,再后跟另一组方括号,指示子数组有多少个元素。
string letters[2][4];
与普通数组一样,您可以使用数组字面量插入值——一个包含在大括号中的逗号分隔列表。在多维数组中,数组字面量中的每个元素都是另一个数组字面量。
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
数组声明中的每一组方括号都为数组添加了一个新的维度。像上面这样的数组被称为具有两个维度。
数组可以具有任意数量的维度。数组的维度越多,代码就越复杂。下面的数组具有三个维度
string letters[2][2][2] = {
{
{ "A", "B" },
{ "C", "D" }
},
{
{ "E", "F" },
{ "G", "H" }
}
};
访问多维数组的元素
要访问多维数组的元素,请为数组的每个维度指定一个索引号。
此语句访问letters数组中第一行 (0)和第三列 (2)的元素值。
示例
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
cout << letters[0][2]; // 输出 "C"
自己动手试一试 »
请记住: 数组索引从 0 开始:[0] 是第一个元素,[1] 是第二个元素,以此类推。
更改多维数组的元素
要更改元素的值,请引用每个维度中元素的索引号
示例
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
letters[0][0] = "Z";
cout << letters[0][0]; // 现在输出 "Z" 而不是 "A"
自己动手试一试 »
循环遍历多维数组
要循环遍历多维数组,您需要为数组的每个维度设置一个循环。
以下示例输出letters数组中的所有元素
示例
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
cout << letters[i][j] << "\n";
}
}
自己动手试一试 »
此示例演示了如何循环遍历三维数组
示例
string letters[2][2][2] = {
{
{ "A", "B" },
{ "C", "D" }
},
{
{ "E", "F" },
{ "G", "H" }
}
};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
for (int k = 0; k < 2; k++) {
cout << letters[i][j][k] << "\n";
}
}
}
自己动手试一试 »
为什么需要多维数组?
多维数组非常适合表示网格。此示例展示了它们的一个实际用途。在以下示例中,我们使用多维数组来表示一个小型战舰游戏
示例
// 我们放置 "1" 来表示那里有一艘船。
bool ships[4][4] = {
{
0, 1, 1, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 1, 0 },
{
0, 0, 1, 0 }
};
// 在这些变量中跟踪玩家的击中次数和已经玩过的回合数
int hits = 0;
int numberOfTurns = 0;
// 允许玩家继续进行,直到他们击中所有四艘船
while (hits < 4) {
int row, column;
cout << "选择坐标\n";
// 询问玩家输入行号
cout << "选择一个 0 到 3 之间的行号: ";
cin >> row;
// 询问玩家输入列号
cout << "选择一个 0 到 3 之间的列号: ";
cin >> column;
// 检查这些坐标中是否存在船
if (ships[row][column]) {
// 如果玩家击中了船,则将其值设置为零以移除它。
ships[row][column] = 0;
// 增加命中计数器
hits++;
// 告诉玩家他们击中了船,以及还剩多少艘船
cout << "命中!还剩 " << (4-hits) << " 艘。\n\n";
} else {
// 告诉玩家他们错过了
cout << "Miss\n\n";
}
// 计算玩家已经进行了多少回合
numberOfTurns++;
}
cout << "胜利!\n";
cout << "您用了 " << numberOfTurns << " 回合赢得比赛";
运行示例 »