多维数组
多维数组的本质是 数组的数组,在存储的信息有多个维度时,使用多维数组会更方便数据的管理。例如,需要记录一个年级的所有班级每个人的成绩,显然使用一个二维数组来做是更方便的。
这里我们就以二维数组为例,在学习完本章后,你可以用类似的方式来定义三维、思维以及更高维的数组。
1.定义数组
格式如下所示:
数据类型 数组名[数组长度1][数组长度2];
例如:
int a[3][4];
这里定义出来的是 一个长度为 3
的数组,它里面的元素是 [长度为 4
的存储 int
类型的数组]。
在理解二维数组的构造上,可以把其第一维看作是行,第二维看作是列,例如下图:
2.数组初始化
对于二维数组,初始化的元素会从 第 0
行第 0
列 开始,从左往右,从上往下的填数据,例如:
int a[3][4] = {1, 2, 3};
// a[0][0] = 1, a[0][1] = 2, a[0][2] = 3, 其余都为0
也可以在 初始化内部用花括号 {}
来区分。
int a[3][4] = {{}, {1, 2}, {3}};
// a[1][0] = 1, a[1][1] = 2, a[2][0] = 3, 其余都为0
另外,在初始化时可以省略第一维的长度,此时第一维的长度会根据初始化的元素的数量来设定,第二维的长度则不可省略:
int a[][3] = {1, 2, 3, 4};
// 相当于 int a[2][3] = {1, 2, 3, 4};
3.通过下标操作数组
下标操作和一维数组没太大区别,只是多了一个维度,需要多一个下标罢了。
格式:数组名[下标1][下标2]
在使用时,需要注意的还是清楚地知道自己要做什么事情,要对什么元素进行操作。
4.循环与二维数组
在对二维数组的批量处理上,经常需要用到嵌套循环,思路是这样的:
外层循环,每次循环处理一行;内层循环,每次循环处理一行中的单个元素。
例如,输入一个 n
行 m
列的数据,并输出:
int n, m;
int a[1005][1005];
cin >> n >> m;
for (int i=1; i<=n; i++) {
for (int j=1; j<=m; j++) {
cin >> a[i][j];
}
}