范围 for 循环(Range-based for loop)是 C++11 引入的一种简化循环语法,用于遍历容器、数组或其他可迭代对象中的所有元素。
1、基本语法
//基本语法
for (declaration : range_expression) {
// 循环体
}
其中:
declaration 是变量声明,表示当前元素
range_expression 是要遍历的序列(如数组、容器等)
2、示例
#include <iostream>
#include <vector>
#include <array>
int main() {
// 遍历数组
int arr[] = {1, 2, 3, 4, 5};
for (int num : arr) {
std::cout << num << " ";
}
std::cout << "\n";
// 遍历vector
std::vector<std::string> words = {"Hello", "World", "C++"};
for (const auto& word : words) {
std::cout << word << " ";
}
std::cout << "\n";
// 遍历array
std::array<double, 3> values = {1.1, 2.2, 3.3};
for (auto val : values) {
std::cout << val << " ";
}
std::cout << "\n";
// 遍历字符串
std::string str = "Range";
for (char c : str) {
std::cout << c << " ";
}
std::cout << "\n";
return 0;
}
3、优点
简洁性:比传统的 for 循环更简洁
安全性:避免越界错误
可读性:代码意图更明确
4、注意事项
(1)默认情况下是值拷贝,如果元素较大,考虑使用引用:
for (const auto& elem : container) // 只读
for (auto& elem : container) // 可修改
(2)范围 for 循环等价于以下传统 for 循环:
{
auto && __range = range_expression;
for (auto __begin = begin_expr, __end = end_expr; __begin != __end; ++__begin) {
declaration = *__begin;
// 循环体
}
}
(3)要使用范围 for 循环,类型必须满足:
有 begin() 和 end() 成员函数,或者
可以通过 ADL (Argument-Dependent Lookup) 找到 begin() 和 end() 函数
范围 for 循环是现代 C++ 中遍历容器的首选方式,它使代码更简洁、更安全。