1. 传统 for
循环:经典永不过时
语法:
for (初始化; 条件; 递增/递减) {
// 循环体
}
示例:遍历数组
int arr[] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; ++i) {
std::cout << arr[i] << " ";
}
// 输出:1 2 3 4 5
适用场景:
-
需要明确控制循环次数或索引时
-
需要反向遍历(如
i--
) -
处理多维数组或嵌套循环
2. 范围 for
循环(C++11 起):简洁优雅的遍历
语法:
for (元素类型 变量名 : 容器) {
// 循环体
}
示例:遍历容器
std::vector<int> vec = {10, 20, 30};
for (int num : vec) {
std::cout << num << " ";
}
// 输出:10 20 30
优势:
-
无需手动管理索引或迭代器
-
避免越界错误,代码更安全
注意:
-
若需修改元素,需使用引用
auto&
for (auto& num : vec) { num *= 2; // 修改容器内的值 }
3. 基于迭代器的 for
循环:灵活处理复杂容器
语法:
for (auto it = 容器.begin(); it != 容器.end(); ++it) {
// 通过 *it 访问元素
}
示例:遍历 std::map
std::map<std::string, int> scores = {{"Alice", 90}, {"Bob", 85}};
for (auto it = scores.begin(); it != scores.end(); ++it) {
std::cout << it->first << ": " << it->second << std::endl;
}
// 输出:Alice: 90 \n Bob: 85
适用场景:
-
需要删除或插入元素时(结合
erase
/insert
) -
处理关联容器(如
map
、set
)
4. 无限 for
循环:灵活控制退出时机
语法:
for (;;) {
// 循环体 + break 条件
}
示例:读取输入直到满足条件
std::string input;
for (;;) {
std::cout << "输入 'exit' 退出: ";
std::cin >> input;
if (input == "exit") break;
}
5. 结合 std::for_each
算法:函数式编程风格
语法:
#include <algorithm>
std::for_each(容器.begin(), 容器.end(), 可调用对象);
示例:使用 Lambda 表达式
std::vector<int> nums = {1, 2, 3};
std::for_each(nums.begin(), nums.end(), [](int n) {
std::cout << n * n << " ";
});
// 输出:1 4 9
优势:
-
可与 STL 算法结合,实现链式处理
-
支持并行执行(C++17 起)
6. 结构化绑定 + 范围 for
(C++17 起):解包复杂元素
语法:
for (auto& [key, value] : 容器) { ... }
示例:遍历 std::map
std::map<std::string, int> scores = {{"Alice", 90}, {"Bob", 85}};
for (const auto& [name, score] : scores) {
std::cout << name << ": " << score << std::endl;
}
// 输出同上迭代器示例,但代码更简洁