C++ 教程

C++ 教程 C++ 简介 C++ 下载安装和环境配置 C++ 快速入门 C++ 语法 C++ 输出 C++ 注释 C++ 变量 C++ 用户输入 C++ 数据类型 C++ 运算符 C++ 字符串 C++ 数学运算 C++ 布尔值 C++ 条件语句 C++ Switch 语句 C++ While 循环 C++ For 循环 C++ Break/Continue 语句 C++ 数组 C++ 结构体 C++ 枚举 C++ 引用 C++ 指针 C++ 内存管理

C++ 函数

C++ 函数 C++ 函数参数 C++ 函数重载 C++ 作用域 C++ 递归 C++ Lambda 表达式

C++ 面向对象

C++ OOP C++ 类和对象 C++ 类方法 C++ 构造函数 C++ 访问修饰符 C++ 封装 C++友元函数 C++ 继承 C++ 多态

C++ 错误

C++ 错误 C++ 调试 C++ 异常 C++ 输入验证

C++ 数据结构

C++ 数据结构和 STL C++ 向量 C++ 列表 C++ 栈 C++ 队列 C++ 双端队列 C++ 集合 C++ 映射 C++ 迭代器 C++ 算法

C++命名空间

C++ 命名空间

C++ 项目

C++ 项目

C++ 如何使用

C++ 两个数相加 C++ 随机数

C++ 关键字与函数参考

C++ 参考 C++ 关键字 C++ <iostream> C++ <fstream> C++ <cmath> C++ <string> C++ <cstring> C++ <ctime> C++ <vector> C++ <algorithm>

C++ 高级教程

C++ 动态内存 C++ 预处理器 C++ 信号处理 C++ 多线程 C++ Web 编程 C++ 正则表达式

C++ 实例

C++ 实例 C++ 练习 C++ 测验 C++ 编译器

C++ 标准库参考

C++ 标准库 - 简介 C++ 标准库 - <fstream> C++ 标准库 - <iomanip> C++ 标准库 - <ios> C++ 标准库 - <iosfwd> C++ 标准库 - <iostream> C++ 标准库 - <istream> C++ 标准库 - <ostream> C++ 标准库 - <sstream> C++ 标准库 - <streambuf> C++ 标准库 - <atomic> C++ 标准库 - <complex> C++ 标准库 - <exception> C++ 标准库 - <functional> C++ 标准库 - <limits> C++ 标准库 - <locale> C++ 标准库 - <memory> C++ 标准库 - <new> C++ 标准库 - <numeric> C++ 标准库 - <regex> C++ 标准库 - <stdexcept> C++ 标准库 - <string> C++ 标准库 - <thread> C++ 标准库 - <tuple> C++ 标准库 - <typeinfo> C++ 标准库 - <utility> C++ 标准库 - <valarray>

C++ 模板库参考

C++ STL 库 - <array> C++ STL 库 - <bitset> C++ STL 库 - <deque> C++ STL 库 - <forward_list> C++ STL 库 - <list> C++ STL 库 - <map> C++ STL 库 - <queue> C++ STL 库 - <set> C++ STL 库 - <stack> C++ STL 库 - <unordered_map> C++ STL 库 - <unordered_set> C++ STL 库 - <vector> C++ STL 库 - <algorithm> C++ STL 库 - <iterator>



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";
运行示例 »