语法格式
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 << " ";
}