6.range-based for statement(for循环的新用法)

13 篇文章 2 订阅
订阅专栏

    C++11中定义了一种for循环用法,可用于容器的遍历,如下图。

    对于一个容器,我们这样写(decl : coll),coll为一个容器,编译器就会把容器中的每个元素依次放入到decl这个变量中,从而完成遍历,且配合auto关键字可自动参数类型推导,很是方便。

    但这里关键要注意值和引用含义的区别,当下面elem为值含义时,每次执行都要进行一次赋值的操作,即把vec的一个元素赋值给elem,假如vec这个容器很大,则可想而知每个元素的赋值操作将影响性能。因此,若改为引用含义的elem(即下面的auto&),由于引用本质上是指针,即遍历过程中不需要进行赋值,因此效率上有提升。同时,要注意,如果遍历过程中需要改变vec中的元素值,则必须采用引用(auto&)形式,此时的elem相当于了容器的迭代器,图中elem *=3将vec中每个元素乘上了3。但是,若使用引用时要改变容器中的值时,首先应当考虑该容器内容是否可以直接通过迭代器的方式改变,所有的关联式容器(如set,map)都是不可以的,所以关联式容器不能这样写

    下图揭示了上面的操作的本质,可见编译器为我们自动定义了一个_pos迭代器,然后每次执行decl=*_pos进行赋值。而当decl为引用时(也就是后面那个elem),const auto& elem = *_pos的意思是,让elem(elem是引用,引用在这里就是指针的含义)指向_pos这个地址(_pos是迭代器,本质上是地址的含义,STL源码分析中有介绍,),注意这里_pos前必须有*,别忘了C++中一个变量的引用是不能等于它的指针的哦,所以这里实际上不是拷贝赋值,这是高效的遍历方式。

    这里加上const进行了只读保护,防止修改容器内部值。


    由上一章知道explicit是禁止隐式转换,而这里在遍历过程中,存在类型不匹配(C和string),因此编译器默认去隐式转换,而C正好有一个参数类型对应的拷贝构造函数C(const string& s),可惜这里加了explicit,故而编译报错。


[C++ 11] Range-based For
Pangda code twice
05-24 550
Range-based For 的一般形式想要遍历C++的各个容器类型以及原生数组,除了使用下标以及迭代器访问之外,还可以使用C++11的一种的for循环形式,Range-based For。其一般的形式:for (declaration : expression) { statement; }以下是一个使用的例子:#include<iostream>int main() { in
range-based for循环
大山喵写博客的地方
12-03 1259
  C++11提供了一种基于范围的for循环,这对于STL迭代器的使用大为简化,语法如下—— #include&amp;lt;iostream&amp;gt; #include&amp;lt;vector&amp;gt; using namespace std; int main(){ vector&amp;lt;int&amp;gt; v1 = {1,3,5,7,9}; vector&amp;lt;int&amp;gt; v2 = {2
Range-Based for
chaohuxiao9181的博客
06-22 183
vector<string>vs={"abc","xyz","mnq"}; vector<string>::iteratoritr=vs.begin(); for(;itr!=vs.end();itr++) { cout<<*itr<<endl; } for(auto&s:vs...
范围基(range-based)for 循环
最新发布
change_xzt的博客
07-30 178
范围基(range-based)for 循环是一种简化遍历容器(如数组、向量、字符串等)中元素的语法,首次引入于C++11。:要遍历的范围,可以是任何支持 begin() 和 end() 方法的对象,例如数组、向量、列表等。:循环变量的声明,通常使用 auto 关键字来自动推导类型。也可以明确指定类型。
基于范围的for循环(range-based for statement)
weixin_42244181的博客
03-06 196
cpp 11 支持基于范围的for循环 for (del : coll){ statement } coll 里的内容会被逐个赋值给del vector<double> vec; ... //拷贝赋值 for (auto elem : vec) { cout<< elem << endl; } //引用传递 for (auto elem& : vec) { elem *= 3; } 第一种写法是拷贝赋值,修改elem并不会修改vec里的元素, 如果想要
C++11 | range-based for loop
热门推荐
安晓辉生涯——聚焦程序员的职业规划与成长
06-06 1万+
C++11里支持range-based for loop了,看看带来了哪些方便
C++11 range-based for循环详解与自定义Range类实现
C++11引入了一种的for循环语法,称为range-based for循环,它极大地简化了对集合或序列类型的数据结构的遍历操作。这种循环语法使得代码更加简洁、易读,尤其适用于标准模板库(STL)中的容器,如vector、list、set...
C++11的for循环,以及范围Range类的简单实现
09-02
在C++11中,引入了一项重要的语言特性,即range-based for循环,它极大地简化了代码的编写,特别是遍历容器或序列的操作。这个特性使得C++更加现代化,与Python等其他语言的遍历方式更为接近。range-based for循环的...
范围for循环处理c语言数组,基于范围的for循环(C++11)
weixin_36487018的博客
05-25 1634
C++11增了一种循环:基于范围的for循环。这简化了一种常见的循环任务:对数组(或容器类,如vector和array)的每个元素执行相同的操作,如下例所示for语句允许简单的范围迭代:(只遍历,不修改)int arrayData[] = {, , , , };for(int x : arrayData)cout << x << " ";cout << end...
Vue 15v-for循环中key属性的使用
mqingo的博客
01-02 3523
15v-for循环中key属性的使用.html &lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;15v-for循环中key属性的使用&lt;/title&gt; &lt;script type="text/javascript&
range-Based for循环
weixin_40026739的博客
02-19 290
在这个示例中,declaration部分的int num声明了一个整型变量num,用于存储每次迭代中的当前元素的值。range-based for循环在遍历过程中不需要指定起始和结束迭代器,它会自动遍历collection中的所有元素,并将每个元素赋值给declaration中声明的变量,然后执行statement中的语句。3.statement循环体内的语句,用于处理每个元素。1.declaration:用于声明循环中每个元素的变量,可以是引用也可以是值,类型由collection中元素的类型决定。
C++11 Range for Statement
Cynhard的专栏
05-15 614
基本形式 可用作expression的类型。 使用方法和注意事项 访问 改变 自建类型与for foreach替代 深度解析
c语言循环11,C++11中基于范围的for循环
weixin_39953618的博客
05-20 206
在 C++03/98 中,不同的容器和数组,遍历的方法不尽相同,写法不统一,也不够简洁,而 C++11 基于范围的 for 循环以统一、简洁的方式来遍历容器和数组,用起来更方便了。C++11 for 循环用法我们知道,在 C++ 中遍历一个容器的方法一般是这样的:#include #include int main(void){std::vector arr;// ...for(auto it...
Range-based for-loop (基于范围的for循环
Parker盘的博客
07-21 1229
基于范围的for循环与普通for循环的主要差别就在于没有循环变量和循环条件控制。 基于范围的for循环中,如果要修改广义集合中的元素,那么必须将元素名变量定义为引用类型
C++11特性Range-Based for
huxyc的博客
06-18 297
/********************************************************************************* *Tools:VS2017 *Complier:v141 *Project:C++11 Range-Based for 相当与C#中的foreach *RabgwBasedfor可以逐一迭代某个给定的区间、数组、集合(range,arrage,or collection) 内的每一个元素。 ************************.
C++:76---C++11标准(Range-Based for循环:基于范围的循环
董哥的黑板报
03-18 1693
一、Range-Based for循环概述 C++引入了一种崭的for循环形式,可以逐一迭代某个给定的区间、数组、集合内的每一个元素。类似于其他编程语言的foreach循环 二、基本格式 decl是给定的coll集合中的每个元素的声明 三、基本使用 例如: int arr[]{ 1,2,3,4,5 }; for (int i : arr) { std::cout <&...
C++11 range-based for loops
Rock's IT Blog
03-26 1560
In the first article introducing C++11 I mentioned that C++11 will bring some nice usability improvements to the language. What I mean is that it removes unnecessary typing and other barriers to get
写文章

热门文章

  • TCP协议详解(一):TCP头部结构 91607
  • CentOS7下安装与打开telnet服务 9778
  • VirtualBox中网络配置——两台虚拟机互访且能够连外网 4663
  • 1.多项式乘法实现 4447
  • 内核编程与应用程序开发的主要区别 3583

分类专栏

  • STL源码剖析 1篇
  • opencv编程技法
  • 机器学习 2篇
  • 图像处理 1篇
  • 操作系统 3篇
  • 计算机网络 5篇
  • 工具安装 4篇
  • 算法学习 1篇
  • C++11 13篇
  • 数据结构与算法分析 3篇

最新评论

  • matlab中图和队列

    yjukh: queue(end+1)=val;

  • TCP协议详解(一):TCP头部结构

    bagazhusang: 学废了感谢平台

  • TCP协议详解(一):TCP头部结构

    刘山川yh: 标志位为啥跟书上不一样

  • TCP协议详解(一):TCP头部结构

    m0_47082393: 他就是这么说的,你可能没仔细看

  • TCP协议详解(一):TCP头部结构

    修诡道的马前卒: 对的,我是这么认为的15表示的是4个字节的个数

最新文章

  • 特征点检测之Harris角点检测
  • matlab中图和队列
  • Opencv在vs下的配置问题
2020年2篇
2019年1篇
2018年31篇
2016年1篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家北京主题商场美陈制造北京定制玻璃钢雕塑方法万圣节商场内美陈布置甘南动物玻璃钢雕塑订做绍兴玻璃钢花盆哪家好玻璃钢树脂雕塑厂家北京玻璃钢人物雕塑定制祖庙玻璃钢人物雕塑深圳商场美陈采购红色玻璃钢人物雕塑现货大足玻璃钢仿铜雕塑丰台玻璃钢动物雕塑宿迁五一商场美陈玻璃钢浮雕校园不锈钢雕塑设计商场dp景点美陈雕塑欧式玻璃钢雕塑供应商梨树玻璃钢雕塑厂家珠海小品玻璃钢雕塑仿铜玻璃钢雕塑生产北京特色商场美陈价格有诚信的玻璃钢雕塑西青玻璃钢动物雕塑景观玻璃钢彩绘雕塑定做价格白城玻璃钢雕塑厂青岛梅州玻璃钢动物雕塑深圳商场开业美陈甘肃玻璃钢人物雕塑设计衡水人物玻璃钢雕塑仿铜西式玻璃钢雕塑厂家有哪些江门能透光玻璃钢雕塑生产厂家香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化