新遍历方法

学习定位:现代 C++ 核心知识。遍历容器是日常代码高频操作,现代写法优先使用范围 for、结构化绑定和标准库算法,让循环意图更清楚。

1. 范围 for

只读遍历:

std::vector<int> values{1, 2, 3};
 
for (const auto& value : values) {
    std::cout << value << '\n';
}

需要修改元素:

for (auto& value : values) {
    value *= 2;
}

简单标量也可以按值:

for (int value : values) {
    std::cout << value << '\n';
}

2. 结构化绑定遍历

遍历 mapunordered_map 或返回 pair/tuple 的范围时,C++17 的结构化绑定更清楚:

std::map<std::string, int> scores{{"Alice", 90}, {"Bob", 80}};
 
for (const auto& [name, score] : scores) {
    std::cout << name << ": " << score << '\n';
}

3. 标准库算法

当循环的意图是查找、计数、转换、删除时,优先考虑标准库算法:

auto it = std::find(values.begin(), values.end(), 3);
 
auto even_count = std::count_if(values.begin(), values.end(), [](int value) {
    return value % 2 == 0;
});

C++20 ranges 可以进一步减少迭代器样板:

auto it = std::ranges::find(values, 3);

4. 选择建议

场景推荐写法
顺序访问所有元素范围 for
需要元素下标普通 forstd::views::enumerate(C++23)
遍历键值对结构化绑定
查找、计数、排序、转换标准库算法
需要手动控制迭代器失效显式迭代器循环

5. 总结

现代 C++ 遍历的重点不是“哪种循环最快”,而是让代码直接表达意图。先掌握范围 for 和算法,再在需要下标、删除元素或处理迭代器失效时使用传统写法。