《C++11标准库》3.1.4Range-Based for循环

C++11引入了一种崭新的for循环形式,可以逐一迭代某个给定的区间,数组,集合内的每一个元素。其他语言可能称此为foreach循环。其一般性语法如下:

coll:存储数据的集合。

decl:coll集合中每个数据元素的声明。

statement:针对decl声明的元素所要执行的指令。

例如:

此特性也可用于容器。

例如:将vector容器中每个元素乘以3.

 在上述例子中,将elem声明为一个引用(reference),以修改原数据且提高效率,如若不这样做,for循环将会作用在元素的一份本地拷贝(local copy)身上。(当然,不使用引用也可以,看你想要怎样使用数据)

在设计程序中,为了避免调用每个元素的copy构造函数和析构函数,通常应声明当前元素为一个const reference 。于是一个用来“打印某集合内所有元素”的泛型函数为:

 一般而言,当coll提供成员函数begin()和成员函数end(),这样的range-based for语句等用于使用迭代器:

如果没有提供成员函数begin()和成员函数end(),那么也可以使用一个全局性的begin()end(),且两者都接受coll为实参,其功能等同于上述方法。

 于是,可以针对初值列使用range-based for 循环,因为class template(类模板)std::initializer_list<>提供了成员函数begin()和成员函数end()。

此外,对于寻常的,大小已知的C-style array也可以使用range-based for

例如:

 还可以:

注:当元素在for循环中被初始化为decl(decl:coll集合中每个数据元素的声明。)时,不得有任何显示类型转换。 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值