
一起动脑筋 · 先看一个小故事
教室有 2 排座位,每排 3 个。女孩让机器人给每个座位贴编号。
把过程摊开来看
- 外层第 1 排内层贴 3 次
- 外层第 2 排内层重新贴 3 次
- 合计2 乘 3 等于 6
嵌套循环让每次外层动作都包含一轮完整的内层重复。
先固定排号,再走遍这一排的列号,然后换下一排。把两个计数器分开记录,就不会混淆。
01什么是嵌套循环?
一个循环的循环体里还可以再写一个循环,这叫嵌套循环。
for (int row = 1; row <= 2; row++) {
for (int col = 1; col <= 3; col++) {
std::cout << row << ',' << col << '\n';
}
}
02它到底怎样执行?
row = 1→col = 1,2,3↓row = 2→col = 1,2,3
外层每进入一轮,内层都会从自己的初始化开始重新执行。
03为什么适合处理表格?
表格天然有“行”和“列”两个方向:
(1,1)(1,2)(1,3)(2,1)(2,2)(2,3)
外层循环可以控制行,内层循环控制列。
04两层循环会执行多少次?
如果外层循环 4 次,每次内层循环都执行 5 次,那么最里面的代码总共执行:
4 × 5 = 20 次
这也是以后理解算法效率的重要基础。
05内外层变量能同名吗?
某些作用域下可以写出遮蔽外层名字的代码,但初学阶段不要这样做。
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
// i 表示外层,j 表示内层
}
}
用不同、含义清楚的名字更容易读懂。
06三层、四层循环可以吗?
语法上可以,但层数越多越难读,而且执行次数可能增长很快。
以后学算法复杂度时,会看到为什么嵌套循环常常意味着更多工作量。
你已经知道了什么
- 循环可以放在另一个循环内部。
- 外层每一轮通常会触发内层完整执行自己的循环过程。
- 嵌套循环适合处理行列、坐标和二维数据。
- 总执行次数通常要把各层循环次数组合起来考虑。
- 嵌套层数越多,越需要清楚追踪变量。
下一篇:break 和 continue 是做什么的?
轮到你来试一试
3 排,每排只贴 2 个座位,总共贴几次?
想好了吗?点开看解释
6 次。可以写出 (1,1)、(1,2)、(2,1)、(2,2)、(3,1)、(3,2) 检查有没有遗漏。