for(auto i : c)

一般用for(auto i : c)就是一个正常的拷贝,如果是一个类的话,会调用复制构造函数。

vector<int> c = {1, 3, 5, 7, 9};

for (auto i : c)
    cout << i << ' ';

如果遍历的是基本类型的话,可以这么用,如果是类的话,开销比较大,不推荐。
for(auto &i : c)与for(const auto &i : c)

这个就是i是c的引用,开销小,不会调用复制构造函数,如果不想改变原来的值得花,可以用for(const auto &i : c),如果想要改变的话,用for(auto &i : c)

vector<int> c = {1, 3, 5, 7, 9};
for (auto &i : c)  
    i *= 10;

for (auto i : c)
    cout << i << ' ';   //输出10,30,50,70,90

for(auto &&i : c)

重头戏在这个地方啦,如果c为一个proxy iterators的话,这方面的典型例子就是vector< bool>详见我的上一篇文章,谈vector< bool>的特殊性——为什么它不是STL容器。
有一个地方需要注意:

vector<bool> c{ false, true, false, true, false };
for (auto i : c)
    cout << i << " ";            //输出0 1 0 1 0
cout << endl;
for (auto i : c){
    i = !i;
}
for (auto i : c)
    cout << i << " ";            //输出1 0 1 0 1
cout << endl;

如果对于vector< bool>用for(auto i : c),对i做改变,也会影响到c。
而对于vector< bool>用for(auto &i : c)在g++上会报错【但是我在VS上不会报错,尴尬】
所以此时需要用右值引用for(auto &&i : c)

vector<bool> c{ false, true, false, true, false };
for (auto &&i : c){
    i = !i;
}

而&&还可以用于非proxy iterators的情况,所以一般情况下,如果要修改遍历的值,都要用

for (auto &&i : c)

如果不修改的话,要用

for (const auto &i : c)

因为常量引用可以绑定到一个临时值上面,用来延长临时值得生命周期,详见我之前的一篇Blog:C++中const和引用的坑点总结
参考资料

Use auto&& for range-based for loops

What is the correct way of using C++11’s range-based for?  
---------------------  
作者:哈乐笑  
来源:CSDN  
原文:https://blog.csdn.net/haolexiao/article/details/56842552  
版权声明:本文为博主原创文章,转载请附上博文链接!

C++11中range-based for loops中与的区别相关推荐

  1. python里删除range里的数字_python中range函数与列表中删除元素

    一.range函数使用 range(1,5)   代表从1到4(不包含5),结果为:1,2,3,4   ,默认步长为1 range(1,5,2)   结果为:1, 3  (同样不包含5) ,步长为2 ...

  2. python 中arange函数_浅谈Python中range与Numpy中arange的比较

    本文先比较range与arange的异同点,再详细介绍各自的用法,然后列举了几个简单的示例,最后对xrange进行了简单的说明. 1. range与arange的比较 (1)相同点:A.参数的可选性. ...

  3. Python中range函数的使用方法

    Python中range函数的使用方法 更新时间:2022年05月30日 11:38:15   作者:Python编程学习圈 这篇文章主要介绍了Python中range函数的使用方法,文章基于Pyth ...

  4. 计算机语言range,python中range输出的方法

    python中range输出的方法 发布时间:2020-08-25 11:50:26 来源:亿速云 阅读:148 作者:小新 这篇文章主要介绍python中range输出的方法,文中介绍的非常详细,具 ...

  5. python中range()函数

    python中range函数用法: [range()]函数可创建一个整数列表,一般用在for循环中,函数语法为[range(start, stop[, step])],其中start是开始计数,sto ...

  6. python中的range函数|python中的range函数|range()函数详解|Python中range(len())的用法

    本期目录 一.range()传递不同的参数 1.传递一个参数时 2.传递两个参数时 3.传递三个参数时 二.使用 range() 构建 for 循环 三.遍历列表时使用 range(len()) 的用 ...

  7. python range函数返回的是什么,python中range函数用法是什么

    python中range函数用法:[range()]函数可创建一个整数列表,一般用在for循环中,函数语法为[range(start, stop[, step])],其中start是开始计数,stop ...

  8. Python中range函数的基本用法完全解读

    range函数大多数时常出现在for循环中,在for循环中可做为索引使用,下面这篇文章主要给大家介绍了关于Python中range函数的基本用法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下 ...

  9. 快速双边滤波在High-Dynamic Range(HDR)图像显示中的应用。

    快速双边滤波在High-Dynamic Range(HDR)图像显示中的应用. 2014年10月21日 ⁄ 综合 ⁄ 共 4617字 ⁄ 字号 小 中 大 ⁄ 评论关闭 高动态范围图像(High-Dy ...

  10. python显示range_python中range如何输出

    python内置range()函数的作用是什么? 它能返回一系列连续增加的整数,它的工作方式类似于分片,可以生成一个列表对象.range函数大多数时常出现在for循环中,在for循环中可做为索引使用. ...

最新文章

  1. mac远程连接centos安装mysql_centos安装Mysql并远程连接
  2. redis设置为null问题
  3. 如何看待自己写的烂代码
  4. 更新版 | GPU CUDA 进阶课程
  5. 组播、IGMP、IGMP Snooping
  6. Spring Cloud 微服务实战系列-Spring Boot再次入门(一)
  7. 北京市电影局:重要项目不停工、不流产、不降标
  8. 【clickhouse】clickhouse表引擎之CollapsingMergeTree
  9. scala 判断字段 是不是 日期类型_举个栗子!Tableau 技巧(147):使用 动态参数 筛选到最新日期值...
  10. c语言 com组件,com组件 C语言基础.ppt
  11. 屋面光伏荷载计算机构,光伏系统屋顶荷载计算
  12. 方法重写和重载的规则
  13. ios常用第三方总结
  14. “云+移动互联时代,2014移动平台高峰论坛”隆重举行
  15. nginx499问题
  16. 如何自学Android编程?
  17. 中国拳手徐灿将战世界拳王:有信心把金腰带带回祖国
  18. app性能数据导出生成图表方法之一
  19. 车载大屏仪表用什么软件开发的
  20. python开源框架排行_Python开源项目最新月榜TOP 10

热门文章

  1. boost::utility::string_ref相关的测试程序
  2. boost::spirit模块演示语法和语义操作的计算器示例
  3. boost::multi_array模块实现index_range 的测试
  4. boost::gil::detail::homogeneous_color_base用法的测试程序
  5. GDCM:gdcm::PDFCodec的测试程序
  6. Boost:排序的bimap双图的测试程序
  7. QDoc分组事物Grouping Things
  8. C语言二叉树总和等于k的所有路径的算法(附完整源码)
  9. C语言实现词典编排算法(附完整源码)
  10. QT的QStorageInfo类的使用