for循环易错边界因初始化、条件、更新三部分未对齐;常见错误是多跑或少跑一次,根源在于三者方向不一致,如i=0时条件应为i

用 for 循环重复执行代码,关键不是写对语法,而是想清「循环变量怎么变」「边界条件怎么设」「循环体里要不要提前退出」。
为什么 for 循环常写错边界?
最常见错误是「多跑一次」或「少跑一次」,比如想打印 0 到 9 却打出 0 到 10,或者根本没进循环。根源在初始化、条件判断、更新三部分没对齐。
- 初始化和条件必须同向:如果从
i = 0开始,条件就该是i ,不是 <code>i - 更新语句要真改变变量:写成
i++没问题,但写成j++(而循环用的是i)就死循环 - 浮点数做循环变量极危险:
for (double x = 0.0; x != 1.0; x += 0.1)很可能永远不等于 1.0,改用整数计数再换算
for 循环里什么时候该用 break 或 continue?
不是所有重复任务都适合“硬刚到底”。比如遍历数组找第一个负数、跳过空行处理日志、避免除零——这些场景下提前干预比靠条件硬控更清晰。
-
break用在「找到就停」:搜索、校验失败立即退出 -
continue用在「不合要求就跳过」:过滤数据、跳过注释行、忽略无效输入 - 注意作用域:
break只跳出最近一层for(或while/switch),嵌套时别指望它直接跳出外层
示例:
for (int i = 0; i < vec.size(); ++i) {<br> if (vec[i] == 0) continue; // 跳过零值<br> result += 100 / vec[i]; // 避免除零<br>}立即学习“C++免费学习笔记(深入)”;
迭代容器时,for 循环用下标还是迭代器?
下标快、直观,但只适用于支持随机访问的容器(如 std::vector、std::array);迭代器通用,但写法稍啰嗦,且对 std::list 或 std::map 是唯一安全选择。
- 用下标时,记得检查
size()是否为 0,否则vec[0]可能越界 - 用迭代器时,别在循环体里删元素还继续
++it——迭代器失效,程序行为未定义 - C++11 起推荐范围
for:for (const auto& x : vec),简洁且不易出错,但无法直接拿到索引
循环看似简单,但变量生命周期、容器修改、浮点精度、异常安全这些细节,一不留神就埋雷。写完先问自己一句:边界值跑过没?空容器试过没?中间出错还能稳住吗?











