范围for循环(Range-based for loop)是C++11引入的一种新特性,它提供了一种更简洁、更直观的方式来遍历容器(如std::deque
、std::vector
、std::list
等)或数组中的所有元素。范围for循环会自动处理迭代器,使得遍历过程更加简洁和易于理解。
基本语法
for(容器数据类型 变量名 :容器实例){}
示例
int main()
{
vector<int>v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
for (auto val : v)//auto可以自动推导容器元素的数据类型
{
cout << val << " ";
}
cout << endl;
return 0;
}
工作原理
范围for循环实际上是基于迭代器的,但它隐藏了迭代器的复杂性。在编译时,编译器会为你处理迭代器的创建和递增。具体来说,对于给定的容器,编译器会查找该容器的begin()
和end()
成员函数,并使用它们来创建迭代器。然后,在每次循环迭代中,编译器都会自动递增迭代器,直到它等于end()
。
注意事项
- 范围for循环通常不能用于修改容器的大小(例如,在循环体内使用
push_back()
或erase()
可能会产生不可预测的结果,因为这会改变容器的end()
迭代器)。 - 范围for循环不直接提供迭代器的访问,因此如果你需要迭代器的功能(如访问前一个或后一个元素),则应该使用传统的基于迭代器的for循环。
- 范围for循环可以配合
const
容器一起使用,此时循环变量也将是const
的,以防止意外修改容器中的元素。 - 范围for循环的语法也适用于C风格的数组和初始化列表等。