C++11中range-based for loops中与的区别
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中与的区别相关推荐
- python里删除range里的数字_python中range函数与列表中删除元素
一.range函数使用 range(1,5) 代表从1到4(不包含5),结果为:1,2,3,4 ,默认步长为1 range(1,5,2) 结果为:1, 3 (同样不包含5) ,步长为2 ...
- python 中arange函数_浅谈Python中range与Numpy中arange的比较
本文先比较range与arange的异同点,再详细介绍各自的用法,然后列举了几个简单的示例,最后对xrange进行了简单的说明. 1. range与arange的比较 (1)相同点:A.参数的可选性. ...
- Python中range函数的使用方法
Python中range函数的使用方法 更新时间:2022年05月30日 11:38:15 作者:Python编程学习圈 这篇文章主要介绍了Python中range函数的使用方法,文章基于Pyth ...
- 计算机语言range,python中range输出的方法
python中range输出的方法 发布时间:2020-08-25 11:50:26 来源:亿速云 阅读:148 作者:小新 这篇文章主要介绍python中range输出的方法,文中介绍的非常详细,具 ...
- python中range()函数
python中range函数用法: [range()]函数可创建一个整数列表,一般用在for循环中,函数语法为[range(start, stop[, step])],其中start是开始计数,sto ...
- python中的range函数|python中的range函数|range()函数详解|Python中range(len())的用法
本期目录 一.range()传递不同的参数 1.传递一个参数时 2.传递两个参数时 3.传递三个参数时 二.使用 range() 构建 for 循环 三.遍历列表时使用 range(len()) 的用 ...
- python range函数返回的是什么,python中range函数用法是什么
python中range函数用法:[range()]函数可创建一个整数列表,一般用在for循环中,函数语法为[range(start, stop[, step])],其中start是开始计数,stop ...
- Python中range函数的基本用法完全解读
range函数大多数时常出现在for循环中,在for循环中可做为索引使用,下面这篇文章主要给大家介绍了关于Python中range函数的基本用法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下 ...
- 快速双边滤波在High-Dynamic Range(HDR)图像显示中的应用。
快速双边滤波在High-Dynamic Range(HDR)图像显示中的应用. 2014年10月21日 ⁄ 综合 ⁄ 共 4617字 ⁄ 字号 小 中 大 ⁄ 评论关闭 高动态范围图像(High-Dy ...
- python显示range_python中range如何输出
python内置range()函数的作用是什么? 它能返回一系列连续增加的整数,它的工作方式类似于分片,可以生成一个列表对象.range函数大多数时常出现在for循环中,在for循环中可做为索引使用. ...
最新文章
- mac远程连接centos安装mysql_centos安装Mysql并远程连接
- redis设置为null问题
- 如何看待自己写的烂代码
- 更新版 | GPU CUDA 进阶课程
- 组播、IGMP、IGMP Snooping
- Spring Cloud 微服务实战系列-Spring Boot再次入门(一)
- 北京市电影局:重要项目不停工、不流产、不降标
- 【clickhouse】clickhouse表引擎之CollapsingMergeTree
- scala 判断字段 是不是 日期类型_举个栗子!Tableau 技巧(147):使用 动态参数 筛选到最新日期值...
- c语言 com组件,com组件 C语言基础.ppt
- 屋面光伏荷载计算机构,光伏系统屋顶荷载计算
- 方法重写和重载的规则
- ios常用第三方总结
- “云+移动互联时代,2014移动平台高峰论坛”隆重举行
- nginx499问题
- 如何自学Android编程?
- 中国拳手徐灿将战世界拳王:有信心把金腰带带回祖国
- app性能数据导出生成图表方法之一
- 车载大屏仪表用什么软件开发的
- python开源框架排行_Python开源项目最新月榜TOP 10
热门文章
- boost::utility::string_ref相关的测试程序
- boost::spirit模块演示语法和语义操作的计算器示例
- boost::multi_array模块实现index_range 的测试
- boost::gil::detail::homogeneous_color_base用法的测试程序
- GDCM:gdcm::PDFCodec的测试程序
- Boost:排序的bimap双图的测试程序
- QDoc分组事物Grouping Things
- C语言二叉树总和等于k的所有路径的算法(附完整源码)
- C语言实现词典编排算法(附完整源码)
- QT的QStorageInfo类的使用