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]; // Outputs "C"
亲自试一试 »
请记住:数组索引从 0 开始:[0] 是第一个元素,[1] 是第二个元素,依此类推。
更改多维数组中的元素
要更改元素的值,请引用该元素在每个维度中的索引号:
示例
string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
letters[0][0] = "Z";
cout << letters[0][0]; // Now outputs "Z" instead of "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] << "
";
}
}
亲自试一试 »
此示例展示了如何遍历三维数组:
示例
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] << "
";
}
}
}
亲自试一试 »
为什么需要多维数组?
多维数组非常适合表示网格。以下示例展示了它们的实际应用。在下面的示例中,我们使用多维数组来表示一个小型战舰游戏:
示例
// We put "1" to indicate there is a ship.
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 << "Selecting coordinates
";
// Ask the player for a row
cout << "Choose a row number between 0 and 3: ";
cin >> row;
// Ask the player for a column
cout << "Choose a column number between 0 and 3: ";
cin >> column;
// 检查这些坐标处是否存在船只。
if (ships[row][column]) {
// 如果玩家击中了一艘船,则将该船的值设置为零来移除它。
ships[row][column] = 0;
// 增加命中计数器
hits++;
// 告诉玩家他们击中了一艘船,以及还剩下多少艘船。
cout << "Hit! " << (4-hits)
<< " left.
";
} else {
// 告诉球员他们错过了
cout << "Miss
";
}
// 计算玩家已经走了多少步。
numberOfTurns++;
}
cout << "Victory!
";
cout << "You won in " << numberOfTurns << " turns";
运行示例 »

