语法格式
for(declaration:expression)
statement
基本使用
遍历输出
vector<int> nums = { 1,2,3,4,5};
for (int num : nums)
{
num++;
cout << num << " ";
}
cout << endl;
遍历时修改
vector<int> nums = { 1,2,3,4,5};
for (int& num : nums)
{
num++;//使用左值引用可修改nums中的元素
cout << num << " ";
}
cout << endl;
遍历时只读
for (const auto num : nums)
{
num++;//错误,const修饰下的num不能被修改,只可读
cout << num << " ";
}
等价实现
左值引用的范围for等价于以下实现
for (auto iter = nums.begin(); iter != nums.end(); iter++)
{
auto& r = *iter;
r++;
cout << r << endl;
}
注意事项
由上述等价实现可以看到,范围for语句的实现是基于迭代器的,已经预存了end()的值,因此不能在遍历的过程中向序列中添加元素,否则会导致迭代器的失效,如下
for (auto num : nums)
{
nums.push_back(1);//不能在范围for的使用过程中添加元素
cout << num << " ";
}