0.前言
C++11引入了一种更简单的for语句,这种语句可用于遍历序列的所有元素。
1.语法形式
for(数据类型 变量 : 序列)
循环语句
序列
可以是花括号括起来的初始值列表、数组、vector
、string
,这些类型的特点是拥有能返回迭代器的 begin
和 end
成员
数据类型:变量
序列中的每个元素都能转换成该变量的类型,最简单的方法是使用auto
类型说明符。
若需要对序列中的元素进行写操作,则需要声明成引用类型&
。
2.举例
下面的例子将vector对象中的每个元素都翻倍
vector<int>v={0,1,2,3,4};
//因为要对v中的元素进行写操作,所以是引用类型
for(auto &r : v)
r*= 2;
博主自己的理解(便于理解,仅供参考)
上面的例子等价于如下传统for循环的写法
vector<int>v={0,1,2,3,4};
for(int i=0; i<v.size(); i++){
v[i]*=2; //r相当于v[i]
}
该例子来源于如下传统for语句
其中:
beg
是指向v的第一个元素的迭代器
end
是指向v的最后一个元素的下一个位置的迭代器
++beg
令beg指向v的下一个元素
for(auto beg= v.begin(), end= v.end(); beg!= end; ++beg){
auto &r= *beg;
r*= 2;
}