深入应用C++11学习笔记_1.4基于范围的for循环

1.4.1 for循环的新用法

algorithm头文件中的for_each ( 同样不是基于范围的循环 ):

std::for_each(arr.begin(), arr_end(), do_cout);

基于范围的for循环,建议使用引用或者const引用:

std::vector<int> arr;
for(const auto& n : arr)
{
	std::cout << n++ <<std::endl;
}
1.4.2 基于范围的for循环的使用细节
  • 对于map等关联性容器来说,auto提取的类型是std::pair,需要用first和second来提取键值。
  • auto推导出的类型是容器的value_type,而非迭代器。
  • 容器本身的约束,如果对set(内部元素为只读)进行循环的话,auto&会被推导为const type&,对map的遍历不能修改first。
  • 无论基于范围的for循环迭代多少次,冒号后的表达式只会在第一次迭代之前被执行。
  • 不允许在迭代过程中对容器进行修改,会造成无法预估的影响。
1.4.3 让基于范围的for循环支持自定义类型

基于范围的for循环本质是通过寻找容器提供的begin和end迭代器来确定范围:

  1. 若容器是一个普通array对象,则begin为array的首地址,end为首地址加长度。
  2. 若容器是一个类对象,则通过查找类的 begin( ) 和 end( ) 方法定位迭代器。
  3. 否则将试图使用全局的 begin 和 end 函数来定位迭代器。

所以对于自定义类型来说,分别实现 begin() 和 end() 方法即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值