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 行, 列;
cout << "选择坐标\n";
// 询问玩家要选择的行
cout << "选择一个介于 0 和 3 之间的行号: ";
cin >> 行;
// 询问玩家要选择的列
cout << "选择一个介于 0 和 3 之间的列号: ";
cin >> 列;
// 检查该坐标处是否有船只
if (船只[行][列]) {
// 如果玩家击中船只,则将值设置为零,从而将其移除。
船只[行][列] = 0;
// 增加命中计数器
命中++;
// 告知玩家他们击中了一艘船,并告知还有多少艘船
cout << "命中! 还有 " << (4-命中) << " 艘。\n\n";
} else {
// 告知玩家他们未命中
cout << "未命中\n\n";
}
// 计算玩家已经进行的回合数
回合数++;
}
cout << "胜利!\n";
cout << "你在 " << 回合数 << " 回合内获胜";
运行示例 »