for(auto i: v)遍历容器元素

  • 1. auto
  • 2. auto&
  • 3. const auto&
  • 4. const auto

C++11 新增了一种循环:基于范围(range-based)的 for 循环。这简化了一种常见的循环任务:对数组(或容器类,如 vector 和 array)的每个元素执行相同的操作,如下例所示:

double prices[5] = {4.99, 10.99, 6.87, 6.47, 8.88};
for (double x : prices)std::cout << x << std::endl;

其中,xxx 最初表示数组 prices 的第一个元素。显示第一个元素后,不断执行循环,而 xxx 依次表示数组的其他元素。因此,该循环可以用来显示数组中的每个值。

要修改数组的元素,需要使用不同的循环变量语法:

for (double &x : prices)x = x * 0.80; //20% off sale

符号 & 表明 xxx 是一个引用变量,能让接下来的代码能够修改数组的内容,而第一种语法不能。

还可结合使用基于范围的 for 循环和初始化列表:

for (int x : {3, 5, 2, 8, 6})cout << x << " ";
cout << '\n';

这种方式可以引申至 C++11 的另一种新特性 auto,使用 auto 遍历容器的方式,有以下几种:

1. auto

autofor(auto x: range) 这样会拷贝一份 range 元素,而不会改变 range 中元素;

2. auto&

当需要修改range中元素,用 for(auto& x: range);

3. const auto&

当只想读取 range 中元素时,使用 const auto&,如:for(const auto&x:range),它不会进行拷贝,也不会修改range;

4. const auto

当需要拷贝元素,但不可修改拷贝出来的值时,使用 for(const auto x:range),避免拷贝开销。

示例:

#include<iostream>
#include<vector>
using namespace std;
int main() {int a[] = { 1,2,3,5,2,0 };vector<int>counts(a,a+6);for (auto count : counts)cout<< count<< " ";cout << endl;return 0;
}
//输出:1 2 3 5 2 0

for(auto i : v)遍历容器元素相关推荐

  1. for(auto x: v)遍历里面的坑

    对STL容器,可以用for(auto x: v)来很方便的遍历.比如 #include<iostream> #include<vector>using namespace st ...

  2. 容器删除元素后迭代器失效_使用迭代器遍历容器元素

    迭代器为我们提供了统一的遍历容器的方式. 1.Iterator源码分析 public Iterator<E> iterator() {return new Itr(); }private ...

  3. C++ STL容器元素正确删除

    一.容器与迭代器 1.1 STL容器 容器是用来管理一大群元素的,为了适应不同需要,STL提供了不同的容器. 在C++中,容器被定义为:在数据存储上,有一种对象类型,它可以持有其他对象或指向其他对象的 ...

  4. php 回调递归,PHP数组函数 array_walk_recursive (使用回调函数递归遍历数组元素)

    在PHP中,数组函数 array_walk_recursive () 使用回调函数递归遍历数组元素. 函数语法:array_walk_recursive ( array &$array , c ...

  5. 老话题,不要在遍历容器中增删容器数据

    代码如下 TellMeLabel::TellMeLabel(FontAtlas *atlas /* = nullptr */, TextHAlignment hAlignment /* = TextH ...

  6. STL中用erase()方法遍历删除元素

    STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.set.map).在使用erase方法来删除元素时 ...

  7. 035_使用Enumeration遍历Vector元素

    import java.util.Enumeration; import java.util.Vector;/*** 使用Enumeration遍历Vector元素*/ public class Ve ...

  8. 1.10 Iterator(迭代器)遍历集合元素

    Iterator(迭代器)遍历Collection集合元素 Iterator(迭代器)是一个接口,它的作用就是遍历容器的所有元素,也是 Java 集合框架的成员,但它与 Collection 和 Ma ...

  9. QT学习笔记(九):遍历容器-迭代器(iterators)

    QT学习笔记(九):遍历容器-迭代器(iterators) 遍历容器 : 1.Jave风格: 2.STL风格: 3.foreach 关键字: 遍历容器 : 遍历一个容器可以使用迭代器(iterator ...

最新文章

  1. WPF命中测试示例(二)——几何区域命中测试
  2. JavaScript知识精简
  3. std::map只修改不用加锁
  4. Codeforces 167B Wizards and Huge Prize(概率dp)
  5. 训练自己haar-like特征分类器并识别物体(1)
  6. 十 Java集合框架(2):Set接口
  7. 计算机联网实验步骤,计算机网络技术实验操作过程.doc
  8. 第二版全新博客园win phone 客户端
  9. 使用gitkraken来push的流程
  10. IntelliJ IDEA scala的源码设置
  11. C/C++获取二维数组行列数
  12. VisualSVN安装图解
  13. 经典机器学习系列(二)【线性判别分析LDA】
  14. 【转】项目代码风格要求
  15. 请假时碰到法定假期,实际请假几天?
  16. [转]“新欢乐时光”病毒源代码分析
  17. 微信小程序给公众号发送模板消息
  18. 零基础如何学习视频制作?超全干货!手把手教你好上手的视频制作技巧
  19. 经典之打印沙漏-数学分析-C/C++
  20. AUTOCAD——永久关闭栅格

热门文章

  1. 助力苏州工业园区从“平民公交”转向“全民公交” ⑤
  2. pl0语言的扩充之repeat-until语句
  3. SPSS随机对照研究总结
  4. soi cmos技术及其应用_微生物污水处理技术及其应用
  5. 杨百万:股市就要见顶了 但没前一次悲惨
  6. mmdetection训练自己的数据并评估mAP
  7. Laravel 上传文件大小改为200M
  8. 浅析Java中的深克隆和浅克隆
  9. 云计算 码率适配限速_一种基于云计算的应用于用户终端的测速方法
  10. CANoe/CAPL ,钉钉群助手消息通知