"范围基for
循环"(range-based for loop)是 C++11 引入的一种新语法,用于遍历容器(如数组、向量、列表等)和范围。这种循环使得对容器内所有元素的访问更加直接和清晰,减少了编码错误的可能性,也使代码更易于阅读和维护。
语法
范围基for
循环的基本语法如下:
for (declaration : range) {
// 循环体
}
- declaration:声明一个变量,这个变量会逐一绑定到范围内的每个元素。变量的类型应与容器中元素的类型兼容,可以是值类型、引用类型或者使用
auto
关键字自动推导。 - range:表示要遍历的容器或数组。
示例
假设我们有一个 std::vector<int>
:
std::vector<int> numbers = {1, 2, 3, 4, 5};
使用范围基for
循环遍历 numbers
并打印每个元素:
for (int number : numbers) {
std::cout << number << " ";
}
使用 auto
关键字可以自动推导元素类型,这在容器元素类型复杂或长时特别有用,
如果你想在遍历时修改容器的元素,应使用引用来声明循环变量:
for (auto& number : numbers) {
std::cout << number << " ";
}
对于遍历map:
在 C++ 中,如果你想遍历一个如 std::map
这样的关联容器,你需要使用正确的迭代器操作。关联容器的迭代器不支持 <
运算符来比较两个迭代器,因为它们通常不是随机访问迭代器(例如 std::vector
的迭代器)。相反,关联容器如 std::map
使用的是双向迭代器。
对于 std::map
或其他标准库提供的关联容器,正确的迭代器循环应该使用 !=
来比较迭代器,如下:
for (auto it = map.begin(); it != map.end(); ++it) {
// 访问 it->first (键) 和 it->second (值)
}