C++11提供了一种新型的for循环形式 - 基于范围的for循环

语法:

for (declaration : expression)
{//循环体
}

在上面的语法格式中,declaration表示遍历声明,在遍历过程中,当前被遍历到的元素会被存储到声明的变量中,expression是要遍历的对象,它可以是表达式,容器,数组,初始化列表等。

代码如下:

#include <vector>
#include <iostream>
using namespace std;int main()
{vector<int> v{ 1,2,3,4,5,6,7,8,9 };for (auto it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;for (auto &item : v)//在这里使用了引用,这样就不会拷贝,效率更高,还能修改元素的值{cout << item++ << " ";}cout << endl;for (auto &item : v){cout << item << " ";}cout << endl;for (const auto &item : v)//既提高效率,也不修改值{cout << item << " ";}cout << endl;return 0;
}

测试结果:

基于范围的for循环需要注意的3个细节:

1.关系型容器

代码如下:

#include<iostream>
#include <map>
#include <string>
using namespace std;int main()
{map<int, string> mp{ {12, "Tom"}, { 13,"jack" }, { 33,"mike" }};for (const auto & item : mp){cout << item.first << " " << item.second << endl;}cout << "-----------------------" << endl;for (auto it = mp.begin(); it != mp.end(); it++){cout << it->first << " " << it->second << endl;}return 0;
}

在上面的例子中使用了两种方法对map容器进行遍历,通过对比,有两点需要注意:

测试结果:

2.元素只读

代码如下:

#include <iostream>
#include <set>using namespace std;int main()
{set<int>st{ 1,2,3,4,5,6 };for (auto &item : st){cout << item++ << endl;//error,不能给常量赋值}return 0;
}

代码如下:

#include <iostream>
#include<map>
#include <string>using namespace std;int main()
{map<int, string>m{ {12,"Tom"},{14,"jack"},{19,"bom"} };for (auto & item : m){cout << item.first++ << " " << item.second << endl;//error}return 0;
}

3.访问次数

代码如下:

#include <iostream>
#include <vector>
#include <string>using namespace std;vector<int>v{ 1,2,3,4,5,6 };vector<int>& getRange()
{cout << "get vector range ..." << endl;return v;
}int main()
{for (auto val : getRange()){cout << val << " ";}cout << endl;return 0;
}

测试结果:

[C++11]基于范围的for循环相关推荐

  1. 2-6:C++快速入门之内联函数,auto关键字,C++11基于范围的for循环和nullptr

    文章目录 一:内联函数 (1)宏函数的缺陷 (2)内联函数的概念 (3)内联函数的特性 二:auto关键字(C++11) (1)auto简介 (2)auto使用注意事项 三:基于范围的for循环(C+ ...

  2. C++11 基于范围的 for 循环

    C++11 引入了基于范围的迭代写法,能够写出简洁的循环语句: 最常用的std::vector 遍历如前段代码: 新的写法如后段代码: #include <iostream> #inclu ...

  3. C++11之基于范围的for循环

    采用c++11新特性中的基于范围for循环,不必去操心数组越界(边界)问题,因此非常的方便,特别是在项目开发中. 语法形式: for(declaration:expression) {statemen ...

  4. C ++ 11基于反向范围的for循环

    本文翻译自:C++11 reverse range-based for-loop Is there a container adapter that would reverse the directi ...

  5. C++起始(内联函数,宏的优缺点,const关键字,auto关键字(C++11)基于范围的for循环(C++11). 指针空值nullptr(C++11))

    内联函数 概念 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销, 内联函数提升程序运行的效率 函数前增加inline关键字将其改成内联函数,在编 ...

  6. 【C++基础】auto关键字(C++11)(auto的使用细则;auto不能推导的场景;auto的使用场景;基于范围的for循环)

    九.auto关键字 9.1 auto简介 在早期C/C++(C++98)中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它.因为在函数内定义的变量默认 ...

  7. C++11 —— 基于区间(range)的 for 循环

    The range-based for statement 0. <algorithm> 中的 for_each for_each 的第三个参数接受一个函数对象: void do_cout ...

  8. mysql matlab for循环嵌套循环语句吗_C++: for_each 和 基于范围的for循环

    普通的for循环 for_each函数模板 基于范围的for循环 普通用的像: for(int i = 0; i 这种的for循环就不说了, 下面主要说一下后两个,做个笔记. 以后用for循环可以考虑 ...

  9. C++中基于范围的for循环

    程序的基本结构包括三种:顺序结构,选择结构(也称分支结构)和循环结构(也称 程序的基本控制结构包括三种:顺序结构.选择结 重复结构).循环结构的实现方法比较多,除了使用 while(). do whi ...

最新文章

  1. Ruby环境的安装(In Ubuntu 7.10)
  2. 建造者模式(Builder)
  3. servlet httpClient 下载远程文件
  4. 福州大学计算机组成原理试题,2016年福州大学计算机专业基础C复试之计算机组成原理复试笔试最后押题五套卷...
  5. CMap在用CString做key类型时,ARG_KEY要选LPCTSTR
  6. Linux的一些配置文件位置
  7. [book]道法自然
  8. aardio教程_官方AARDIO课程已经开课了!学习的速来报道!
  9. 飞鸽传书10048错误的解决
  10. 写了8年的代码,做过的项目都下线了,程序员的意义在哪里!
  11. 23.使用非阻塞IO 2
  12. java 中 class 对象_java中Class对象详解
  13. 如何借助ArrayAdapter和Spinner实现下拉列表
  14. ArcMAP 启动要素构造工具条
  15. 一级注册结构工程师《基础考试》题库历年真题
  16. C语言制作简谱播放器
  17. 017年Android百大框架排行榜
  18. 读不完《程序员修炼之道》,至少可以读完这70条
  19. 一份机器学习的自白书
  20. 三至六世紀浙東地區的經濟發展

热门文章

  1. 【BIM入门实战】Revit 2018墙体绘制—别墅地下室
  2. 什么是物理路径,相对路径,绝对路径以及根目录
  3. 反序列化层遍历二叉树
  4. 探讨float类型的数值,为什么两个float不能直接相等
  5. linux怎么看是否安装kde桌面,ubuntu 7上安装kde桌面
  6. 神PS!老爸把儿子的画作P成现实,看完我笑哭了
  7. 跟你们讲一个鬼故事,TA回来了!
  8. 炸锅了!Google称2029年人类开始实现永生不死!疾病,衰老,痛苦将彻底消失!?
  9. php 版本排序,四种常见排序算法--PHP版本
  10. 放大器非线性失真研究装置_高效布里渊光纤放大器