论C++11 中vector的N种遍历方法
随着C++11标准的出现,C++标准添加了许多有用的特性,C++代码的写法也有比较多的变化。
vector是经常要使用到的std组件,对于vector的遍历,本文罗列了若干种写法。
(注:本文中代码为C++11标准的代码,需要在较新的编译器中编译运行)
假设有这样的一个vector:(注意,这种列表初始化的方法是c++11中新增语法)
vector<int> valList = { , , , , , , , , , };
需要输出这个vector中的每个元素,测试原型如下:
void ShowVec(const vector<int>& valList)
{
}
int main(int argc, char* argv[])
{
vector<int> valList = { , , , , , , , , , };
ShowVec(valList);
return ;
}
下面就开始我们的茴香豆的N种写法吧 !
方法零,对C念念不舍的童鞋们习惯的写法:
void ShowVec(const vector<int>& valList)
{
int count = valList.size();
for (int i = ; i < count;i++)
{
cout << valList[i] << endl;
}
}
或者
void ShowVec(const vector<int>& valList)
{
int count = valList.size();
for (int i = 0; i < count;i++)
{
cout << valList.at(i) << endl;
}
}
方法一,大家喜闻乐见的for循环迭代器输出,(注意,此处使用了C++11中新增的标准库容器的cbegin函数)
void ShowVec(const vector<int>& valList)
{
for (vector<int>::const_iterator iter = valList.cbegin(); iter != valList.cend(); iter++)
{
cout << (*iter) << endl;
}
}
或者使用c++新增的语义auto,与上面差不多,不过能少打几个字:
void ShowVec(const vector<int>& valList)
{
for (auto iter = valList.cbegin(); iter != valList.cend(); iter++)
{
cout << (*iter) << endl;
}
}
方法二,for_each加函数:
template<typename T>
void printer(const T& val)
{
cout << val << endl;
}
void ShowVec(const vector<int>& valList)
{
for_each(valList.cbegin(), valList.cend(), printer<int>);
}
方法三,for_each加仿函数:
template<typename T>
struct functor
{
void operator()(const T& obj)
{
cout << obj << endl;
}
};
void ShowVec(const vector<int>& valList)
{
for_each(valList.cbegin(), valList.cend(), functor<int>());
}
方法四,for_each加Lambda函数:(注意:lambda为c++11中新增的语义,实则是一个匿名函数)
void ShowVec(const vector<int>& valList)
{
for_each(valList.cbegin(), valList.cend(), [](const int& val)->void{cout << val << endl; });
}
方法五,for区间遍历:(注意,for区间遍历是c++11新增的语法,用于迭代遍历数据列表)
for (auto val : valList)
{
cout << val << endl;
}
etc.
本文纯属无聊所写,期待更多蛋疼的方法!
最后:
C++11相比C++98/03还是更新了挺多东西的,目前g++最新版已完全支持C++11标准,这意味着开源社区的新的project必然将迁移到最新的C++11标准上,平时参与/阅读/参考开源代码的童鞋们需要学习了。
作为C++程序员,我们当然要与时俱进,拥抱C++11!
此处推荐一个学习C++11的github链接:https://github.com/sib9/cpp1x-study-resource
下面附一个C++11更新列表:
--------------------------------------------------------
论C++11 中vector的N种遍历方法的更多相关文章
- C++11中vector的几种遍历方法
假设有这样的一个vector: vector<int> line={1,2,3,4,5,6,7,8,9}; 需要输出vector里的每个元素,主函数如下: void showvec(con ...
- Jquery中each的三种遍历方法
Jquery中each的三种遍历方法 $.post("urladdr", { "data" : "data" }, function(dat ...
- Java中Map的三种遍历方法
Map的三种遍历方法: 1. 使用keySet遍历,while循环: 2. 使用entrySet遍历,while循环: 3. 使用for循环遍历. 告诉您们一个小秘密: (下↓面是测试代码,最爱看 ...
- jquery中each的3种遍历方法
1.选择器+遍历 $('div').each(function (i){ i就是索引值 this 表示获取遍历每一个dom对象 }); 2.选择器+遍历 $('div').each(function ...
- Jquery中each的3种遍历方式
学习目标: 参考博文: https://blog.csdn.net/honey_th/article/details/7404273 一.Jquery中each的几种遍历方法 1. 选择器+遍历 &l ...
- 谈谈vector容器的三种遍历方法
说明:本文仅供学习交流.转载请标明出处.欢迎转载! vector容器是最简单的顺序容器,其用法相似于数组.实际上vector的底层实现就是採用动态数组.在编敲代码的过程中.经常会变量 ...
- qt qml中PropertyAnimation的几种使用方法
qml文章 qt qml中PropertyAnimation的几种使用方法 动画应用场景有以下几种: 首先如果一个Rectangle.动画是要改变它的x和y值 1,Rectangle一旦被创建,就要移 ...
- JS 中深拷贝的几种实现方法
JS 中深拷贝的几种实现方法1.使用递归的方式实现深拷贝 //使用递归的方式实现数组.对象的深拷贝 function deepClone1(obj) { //判断拷贝的要进行深拷贝的是数组还是对象,是 ...
- stl中map的四种插入方法总结
stl中map的四种插入方法总结方法一:pair例:map<int, string> mp;mp.insert(pair<int,string>(1,"aaaaa&q ...
随机推荐
- OpenMPI运行问题:enough slots available in the system
版本: Open MPI 3.0.1 编译好可执行的C语言程序后,使用 mpirun -np 3 Test 命令,发现没有正常运行,而是报错: There are not enough slots a ...
- 使用Zabbix监控rabbitmq服务
添加rabbitmq脚本 [root@controller rabbitmq]# cd /etc/zabbix/script/rabbitmq [root@controller rabbitmq]# ...
- @ConfigurationProperties注解对数据的自动封装
@ConfigurationProperties注解对数据的自动封装 @ConfigurationProperties可以对基本数据类型实现自动封装,可以封装格式为yyyy/MM/dd的日期 测试代码 ...
- spring boot 下使用@ConponentScan注解遇到的问题
问题描述 如果你心急看结果,请直接到本文末尾 今天使用了注解操作spring boot,一开始程序无法启动,提示无法找到一个注解注入的类,查询网上,有人说使用@ConponetScan注解,可以指定需 ...
- CryptoZombies学习笔记——Lesson4
第四课主要介绍payable函数相关. chapter1: payable修饰函数 以太坊允许同时调用函数和eth转账.msg.value显示发送到合约的以太币数,ether是内置整型数.如果函数没有 ...
- Thunder团队第五周 - Scrum会议6
Scrum会议6 小组名称:Thunder 项目名称:i阅app Scrum Master:邹双黛 工作照片: 宋雨同学在拍照,所以不在照片内. 参会成员: 王航:http://www.cnblogs ...
- C++读取文件统计单词个数及频率
1.Github链接 GitHub链接地址https://github.com/Zzwenm/PersonProject-C2 2.PSP表格 PSP2.1 Personal Software Pro ...
- win7 x64+iis7.5 配置错误:CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\7cb4f3
解决方法: 1. 将windows/temp属性-安全-高级 添加IIS_USERS用户,同时编辑权限为完全控制(写入和编辑)即可. 注意: 要确保权限添加上了,win7下有可能系统为安全,会自动取消 ...
- 实验吧编程题:Hashkill
原题:6ac66ed89ef9654cf25eb88c21f4ecd0是flag的MD5码,(格式为ctf{XXX_XXXXXXXXXXX_XXXXX})由一个0-1000的数字,下划线,纽约的一个区 ...
- 【Linux】- vi/vim
所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正 ...