一维数组
数组是批量存储数据的容器,它可以存储多个相同类型的数据元素,我们把存储在数组中的数据称为元素。
1.定义数组
格式如下所示:
数据类型 数组名[数组长度];
例如,定义一个能存储 100
个 int
型数据的数组,名字为 a
,代码为:
int a[100];
一般来说,我们会把数组定义在全局位置,并且在算法竞赛里,数组的长度会根据题目给出的数据范围的最大值来设定,且通常会比最大值多一些,这样是避免下标越界的问题。
需要注意的是,数组的长度必须是整数,且不能用变量来声明,下面是一个错误的例子:
int x = 100;
int a[x];
但如果是常量,则可以作为数组的长度,如果要定义的数组较多,且长度都是一样的,我们会选择定义常量的方式来减少代码量,例如:
const int N = 1005;
int a[N], b[N], c[N];
2.数组初始化
初始化指的是,在定义数组时,给数组中存储一些初始的数据,下面进行了展示,例如:
int a[105] = {1, 5, 3};
// 第一个元素是1,第二个元素是5,第三个元素是3,其余元素为0
int b[105] = {};
// 不写的话初始全是0
int c[] = {3, 4, 5};
// 如果不指定数组长度,那么数组的长度就按初始化的元素数量来。
3.通过下标操作数组
数组中的每个元素都有下标,第一个元素的下标是 0,第二个是 1,以此类推。。
易知,当一个数组的长度是
所以注意,在通过下标操作数组元素时,使用的下标不要超过其下标范围,否则我们会访问到一个未知的内存空间,那么会发生什么就不可预料了,但在程序竞赛里大概率是 Runtime Error (运行出错)
。
下标操作的格式:数组名[下标]
例如我们想输出数组 a
中下标为 5
的元素,那么可以写:
cout << a[5];
下标操作并不难,我们可以把数组元素理解为名字特殊一点的变量,变量可以做的事情,数组元素都可以做。
4.循环与数组
因为数组元素都是通过他们的下标来操作的,比如对于数组 a
,a[1]
就是在操作下标为 1
的元素,a[5]
就是操作下标为 5
的元素。那么,如果我们要对数组元素批量进行操作,例如要输出数组中下标 1~5
的所有元素,普通写法就是:
cout << a[1] << '\n';
cout << a[2] << '\n';
cout << a[3] << '\n';
cout << a[4] << '\n';
cout << a[5] << '\n';
但其实可以发现,这些代码中,只有下标是不同的,那就可以用循环列出 1~5
的数字,然后把循环变量作为数组元素,来实现批量操作数组元素。
for (int i=1; i<=5; i++) {
cout << a[i] << '\n';
}
本质上说,对数组的操作还是要回归到对循环的理解,“对数组进行批量操作” 时为什么要用循环、如何使用循环,就是通过循环枚举出数组的下标来进行批量操作。