随着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种遍历方法的更多相关文章

  1. C++11中vector的几种遍历方法

    假设有这样的一个vector: vector<int> line={1,2,3,4,5,6,7,8,9}; 需要输出vector里的每个元素,主函数如下: void showvec(con ...

  2. Jquery中each的三种遍历方法

    Jquery中each的三种遍历方法 $.post("urladdr", { "data" : "data" }, function(dat ...

  3. Java中Map的三种遍历方法

    Map的三种遍历方法: 1. 使用keySet遍历,while循环: 2. 使用entrySet遍历,while循环: 3. 使用for循环遍历.   告诉您们一个小秘密: (下↓面是测试代码,最爱看 ...

  4. jquery中each的3种遍历方法

    1.选择器+遍历 $('div').each(function (i){ i就是索引值 this 表示获取遍历每一个dom对象 }); 2.选择器+遍历 $('div').each(function  ...

  5. Jquery中each的3种遍历方式

    学习目标: 参考博文: https://blog.csdn.net/honey_th/article/details/7404273 一.Jquery中each的几种遍历方法 1. 选择器+遍历 &l ...

  6. 谈谈vector容器的三种遍历方法

    说明:本文仅供学习交流.转载请标明出处.欢迎转载!          vector容器是最简单的顺序容器,其用法相似于数组.实际上vector的底层实现就是採用动态数组.在编敲代码的过程中.经常会变量 ...

  7. qt qml中PropertyAnimation的几种使用方法

    qml文章 qt qml中PropertyAnimation的几种使用方法 动画应用场景有以下几种: 首先如果一个Rectangle.动画是要改变它的x和y值 1,Rectangle一旦被创建,就要移 ...

  8. JS 中深拷贝的几种实现方法

    JS 中深拷贝的几种实现方法1.使用递归的方式实现深拷贝 //使用递归的方式实现数组.对象的深拷贝 function deepClone1(obj) { //判断拷贝的要进行深拷贝的是数组还是对象,是 ...

  9. stl中map的四种插入方法总结

    stl中map的四种插入方法总结方法一:pair例:map<int, string> mp;mp.insert(pair<int,string>(1,"aaaaa&q ...

随机推荐

  1. Alpha 冲刺(2/10)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 协助前端界面的开发 搭建测试用服务器的环境 完成 ...

  2. lintcode-184-最大数

    184-最大数 给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数. 注意事项 最后的结果可能很大,所以我们返回一个字符串来代替这个整数. #### 样例 给出 [1, 20, 23, 4, ...

  3. iOS开发CABasicAnimation动画理解

    1.CALayer简介 CALayer是个与UIView很类似的概念,同样有backgroundColor.frame等相似的属性,我们可以将UIView看做一种特殊的CALayer.但实际上UIVi ...

  4. js控制input只能输入数字和小数点后两位,输入其他自动清除方法。

    工作中input='text'总会遇到要控制输入数字,或者是输入中文,输入电话,输入身份证号,邮箱等.今天我遇到的是要输入数字并且只能小数点后面两位的数字,还不能为负数.废话不多说上代码: <i ...

  5. YaoLingJump开发者日志(二)

      熟悉了一点LGame里的套路,可以正式开工了.   增加了一个信息栏,显示得分.硬币数.生命值和当前关卡(仿照了超级玛丽的布局).   准备瑶玲的各种动画(静止.奔跑.跳跃.趴下.休息和死亡等). ...

  6. oracle 9i 图文安装教程 oracle 9i 安装

    我的安装文件是ISO镜像文件,使用Virtual DAEMON Manager v 4.10打开: ora9i-1.iso ora9i-2.iso ora9i-3.iso 首先必须把上面三个镜像文件都 ...

  7. 关闭win7/Server 2008非正常关机启动自动修复功能

    命令提示符下输入 bcdedit /set {default} bootstatuspolicy ignoreallfailures bcdedit /set {current} recoveryen ...

  8. Java、JSP与JavaScript的区别

    java和javaScript是两种完全不同的语言,并不是收都有个java就类似 Java,全称应该是 Java Applet,是嵌在网页中,而又有自己独立的运行窗口的小程序.Java Applet ...

  9. JavaScript中setInterval常见的问题(setInterval第一个参数加引号与不加引号区别)

  10. 【ASP.NET Core】ASP.NET Core API 版本控制

    几天前,我和我的朋友们使用 ASP.NET Core 开发了一个API ,使用的是GET方式,将一些数据返回到客户端 APP.我们在前端进行了分页,意味着我们将所有数据发送给客户端,然后进行一些dat ...