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 << "未击中\n\n"; } // 计算玩家玩了多少轮 numberOfTurns++; } cout << "胜利!\n"; cout << "您在 " << numberOfTurns << " 轮内获胜";