
一起动脑筋 · 先看一个小故事
女孩要给每位同学发一张卡片,不想漏掉谁。她从 0 号开始,每次往后走一格。
把过程摊开来看
- 下标 0处理第一个
- 下标 1处理第二个
- 依次继续处理剩余元素
- 到长度停止
遍历就是按计划访问一组元素。
对长度为 n 的数组,从 0 开始,每轮加 1,只在下标小于 n 时处理,恰好覆盖每个元素一次。
01什么叫遍历?
遍历(Traversal)就是把一组数据中的元素逐个访问一遍。
例如依次打印数组中的所有成绩。
02用下标遍历数组
int a[5] = {10, 20, 30, 40, 50};
for (int i = 0; i < 5; i++) {
std::cout << a[i] << ' ';
}
i=0 → a[0]→i=1 → a[1]→...→i=4 → a[4]
03为什么条件写 i < 5?
因为合法下标是 0、1、2、3、4。
当 i == 5 时,已经越过最后一个元素,所以循环必须结束。
04能不能不用下标?
可以使用范围 for:
for (int value : a) {
std::cout << value << ' ';
}
这里会依次把每个元素的值复制给 value。
05如果要修改元素怎么办?
范围 for 可以使用引用:
for (int& value : a) {
value = value + 1;
}
这里的 value 是每个数组元素的引用,因此修改它就会修改原数组。
06怎样避免把长度写死?
对真正的数组对象,可以用 C++17 的 std::size:
for (std::size_t i = 0; i < std::size(a); i++) {
std::cout << a[i];
}
这样数组长度改变时,循环不容易忘记同步修改。
你已经知道了什么
- 遍历就是逐个访问数组元素。
- 下标遍历通常从 0 到 n-1。
- 循环条件常写成
i < n。 - 范围 for 可以不用手动管理下标。
- 使用引用可以在范围 for 中直接修改元素。
下一篇:怎样求最大值和最小值?
轮到你来试一试
长度为 3,访问下标 1、2、3,是正确的完整遍历吗?
想好了吗?点开看解释
不是。漏了 0,又访问了越界的 3。正确的正向顺序是 0、1、2。