女孩和机器人一起思考

一起动脑筋 · 先看一个小故事

女孩要给每位同学发一张卡片,不想漏掉谁。她从 0 号开始,每次往后走一格。

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 下标 0处理第一个
  2. 下标 1处理第二个
  3. 依次继续处理剩余元素
  4. 到长度停止

遍历就是按计划访问一组元素。

对长度为 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。