1.基于范围的for循环
int main()
{
std::vector<int> arr = {1,2,3};
for ( auto i : arr )//只可读,如果需要遍历时可写,修改i为auto& i
{
cout<<i<<endl;
}
return 0;
}
2.for循环对容器的访问频率比较
std::vector<int> arr = {1,2,3,4,5,6};
vector<int>& getRange()
{
cout<<"GetRange()."<<endl;
return arr;
}
int main()
{
for ( auto i : getRange() )
{
cout<<"auto:"<<i<<",";
}
cout<<endl;
cout<<"-------------------------------"<<endl;
vector<int>::iterator iter;
for (iter = getRange().begin(); iter != getRange().end(); ++iter)
{
cout<<"iterator:"<<*iter<<",";
}
cout<<endl;
return 0;
}
输出:
从上面的结果可以看出,不论基于范围的for循环迭代多少次,GetRange()只在第一次迭代之前被调用。同普通的for循环一样,在迭代时修改容器很可能会引起迭代器失效。