C++ · 数组
二维与多维数组
理解 C++ 二维数组的行列下标,用每行求和与合法邻居访问的例子练习嵌套遍历和边界判断。
行列下标与二维遍历
int a[2][3] 表示 2 行 3 列,共 6 个整数;访问 a[i][j] 时要同时满足 0≤i<2、0≤j<3。
C++ 的多维数组本质上是数组的数组,按行连续存放。常用外层循环枚举行,内层循环枚举列。全部初始化为零可写 int a[2][3] = {};。
三维数组 a[层][行][列] 可表示多张表格,元素总数等于各维大小的乘积。数组过大时要估算内存;标准 C++14 的普通数组维度应是编译期常量,动态尺寸可用 vector。
每行求和与合法邻居
例1:分别计算每一行的和
#include <iostream>
using namespace std;
int main() {
int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
for (int i = 0; i < 2; ++i) {
int sum = 0;
for (int j = 0; j < 3; ++j) sum += a[i][j];
cout << sum << endl;
}
}输出 6 和 15。sum 在每一行开始时重新置零,若放到外层循环外会变成累计总和。
例2:只访问合法邻居
#include <iostream>
using namespace std;
int main() {
int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
int dx[4] = {-1, 1, 0, 0}, dy[4] = {0, 0, -1, 1};
int x = 0, y = 0, sum = 0;
for (int d = 0; d < 4; ++d) {
int nx = x + dx[d], ny = y + dy[d];
if (nx >= 0 && nx < 2 && ny >= 0 && ny < 3) sum += a[nx][ny];
}
cout << sum << endl;
}左上角只有下方 4 和右方 2 两个合法邻居,输出 6;检查边界后才能访问数组。
提示
- 行数和列数不同,不能在两个循环中都照抄同一个上限。
- 二维数组 a[0][3] 即使碰巧接近下一行内存,也不是合法的跨行访问。
- 多维数组的空间按维度相乘,1000×1000 个常见 4 字节 int 约占 4 MB。
先修知识
技术参考
范围说明
本站讲解由 InfoCode 编写,不是官方考纲;参考级别是本站映射,不代表官方等级、认证或参赛资格。练习记录不等于掌握或资格。
参考级别:GESP 4 级(本站映射)