[C++11]基于范围的for循环
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循环相关推荐
- 2-6:C++快速入门之内联函数,auto关键字,C++11基于范围的for循环和nullptr
文章目录 一:内联函数 (1)宏函数的缺陷 (2)内联函数的概念 (3)内联函数的特性 二:auto关键字(C++11) (1)auto简介 (2)auto使用注意事项 三:基于范围的for循环(C+ ...
- C++11 基于范围的 for 循环
C++11 引入了基于范围的迭代写法,能够写出简洁的循环语句: 最常用的std::vector 遍历如前段代码: 新的写法如后段代码: #include <iostream> #inclu ...
- C++11之基于范围的for循环
采用c++11新特性中的基于范围for循环,不必去操心数组越界(边界)问题,因此非常的方便,特别是在项目开发中. 语法形式: for(declaration:expression) {statemen ...
- C ++ 11基于反向范围的for循环
本文翻译自:C++11 reverse range-based for-loop Is there a container adapter that would reverse the directi ...
- C++起始(内联函数,宏的优缺点,const关键字,auto关键字(C++11)基于范围的for循环(C++11). 指针空值nullptr(C++11))
内联函数 概念 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销, 内联函数提升程序运行的效率 函数前增加inline关键字将其改成内联函数,在编 ...
- 【C++基础】auto关键字(C++11)(auto的使用细则;auto不能推导的场景;auto的使用场景;基于范围的for循环)
九.auto关键字 9.1 auto简介 在早期C/C++(C++98)中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它.因为在函数内定义的变量默认 ...
- C++11 —— 基于区间(range)的 for 循环
The range-based for statement 0. <algorithm> 中的 for_each for_each 的第三个参数接受一个函数对象: void do_cout ...
- mysql matlab for循环嵌套循环语句吗_C++: for_each 和 基于范围的for循环
普通的for循环 for_each函数模板 基于范围的for循环 普通用的像: for(int i = 0; i 这种的for循环就不说了, 下面主要说一下后两个,做个笔记. 以后用for循环可以考虑 ...
- C++中基于范围的for循环
程序的基本结构包括三种:顺序结构,选择结构(也称分支结构)和循环结构(也称 程序的基本控制结构包括三种:顺序结构.选择结 重复结构).循环结构的实现方法比较多,除了使用 while(). do whi ...
最新文章
- Ruby环境的安装(In Ubuntu 7.10)
- 建造者模式(Builder)
- servlet httpClient 下载远程文件
- 福州大学计算机组成原理试题,2016年福州大学计算机专业基础C复试之计算机组成原理复试笔试最后押题五套卷...
- CMap在用CString做key类型时,ARG_KEY要选LPCTSTR
- Linux的一些配置文件位置
- [book]道法自然
- aardio教程_官方AARDIO课程已经开课了!学习的速来报道!
- 飞鸽传书10048错误的解决
- 写了8年的代码,做过的项目都下线了,程序员的意义在哪里!
- 23.使用非阻塞IO 2
- java 中 class 对象_java中Class对象详解
- 如何借助ArrayAdapter和Spinner实现下拉列表
- ArcMAP 启动要素构造工具条
- 一级注册结构工程师《基础考试》题库历年真题
- C语言制作简谱播放器
- 017年Android百大框架排行榜
- 读不完《程序员修炼之道》,至少可以读完这70条
- 一份机器学习的自白书
- 三至六世紀浙東地區的經濟發展