随着C++11标准的出现,C++标准添加了许多有用的特性,C++代码的写法也有比较多的变化。

vector是经常要使用到的std组件,对于vector的遍历,本文罗列了若干种写法。

(注:本文中代码为C++11标准的代码,需要在较新的编译器中编译运行)

假设有这样的一个vector:(注意,这种列表初始化的方法是c++11中新增语法)

  1. vector<int> valList = { , , , , , , , , , };

需要输出这个vector中的每个元素,测试原型如下:

  1. void ShowVec(const vector<int>& valList)
  2. {
  3. }
  4. int main(int argc, char* argv[])
  5. {
  6. vector<int> valList = { , , , , , , , , , };
  7. ShowVec(valList);
  8. return ;
  9. }

下面就开始我们的茴香豆的N种写法吧 !

方法零,对C念念不舍的童鞋们习惯的写法:

  1. void ShowVec(const vector<int>& valList)
  2. {
  3. int count = valList.size();
  4. for (int i = ; i < count;i++)
  5. {
  6. cout << valList[i] << endl;
  7. }
  8. }

或者

  1. void ShowVec(const vector<int>& valList)
  2. {
  3. int count = valList.size();
  4. for (int i = 0; i < count;i++)
  5. {
  6. cout << valList.at(i) << endl;
  7. }
  8. }

方法一,大家喜闻乐见的for循环迭代器输出,(注意,此处使用了C++11中新增的标准库容器的cbegin函数)

  1. void ShowVec(const vector<int>& valList)
  2. {
  3. for (vector<int>::const_iterator iter = valList.cbegin(); iter != valList.cend(); iter++)
  4. {
  5. cout << (*iter) << endl;
  6. }
  7. }

或者使用c++新增的语义auto,与上面差不多,不过能少打几个字:

  1. void ShowVec(const vector<int>& valList)
  2. {
  3. for (auto iter = valList.cbegin(); iter != valList.cend(); iter++)
  4. {
  5. cout << (*iter) << endl;
  6. }
  7. }

方法二,for_each加函数:

  1. template<typename T>
  2. void printer(const T& val)
  3. {
  4. cout << val << endl;
  5. }
  6. void ShowVec(const vector<int>& valList)
  7. {
  8. for_each(valList.cbegin(), valList.cend(), printer<int>);
  9. }

方法三,for_each加仿函数:

  1. template<typename T>
  2. struct functor
  3. {
  4. void operator()(const T& obj)
  5. {
  6. cout << obj << endl;
  7. }
  8. };
  9. void ShowVec(const vector<int>& valList)
  10. {
  11. for_each(valList.cbegin(), valList.cend(), functor<int>());
  12. }

方法四,for_each加Lambda函数:(注意:lambda为c++11中新增的语义,实则是一个匿名函数)

  1. void ShowVec(const vector<int>& valList)
  2. {
  3. for_each(valList.cbegin(), valList.cend(), [](const int& val)->void{cout << val << endl; });
  4. }

方法五,for区间遍历:(注意,for区间遍历是c++11新增的语法,用于迭代遍历数据列表)

  1. for (auto val : valList)
  2. {
  3. cout << val << endl;
  4. }

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. CSP201412-2:Z字形扫描

    引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...

  2. Visaul Studio 密钥

    vs professional 2015 简体中文版  :HMGNV-WCYXV-X7G9W-YCX63-B98R2

  3. Servlet过滤器介绍之原理分析

    zhangjunhd 的BLOG     写留言去学院学习发消息 加友情链接进家园 加好友 博客统计信息 51CTO博客之星 用户名:zhangjunhd 文章数:110 评论数:858 访问量:19 ...

  4. 1.linux环境配置

    首先说一下,这里是虚拟机环境. 1.用vbox安装centos6.8-mini 注意不要使用复制的方式安装,复制的虚拟机网络不通 安装如下: 主机 ip 角色 内存 hadoop1 192.168.0 ...

  5. Thunder团队第六周 - Scrum会议1

    Scrum会议1 小组名称:Thunder 项目名称:i阅app Scrum Master:王航 工作照片: 参会成员: 王航(Master):http://www.cnblogs.com/wangh ...

  6. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

  7. c#笔记整理 关于继承与多态等

    [ 塔 · 第 二 条 约 定 ] c#面向对象基础 整理private.protected.public.abstract等的异同 public 公有访问.不受任何限制. private 私有访问. ...

  8. 《剑指offer》---丑数

    本文算法使用python3实现 1. 问题1 1.1 题目描述:   把只包含因子2.3和5的数称作丑数(Ugly Number).判断一个数是否是丑数.   时间限制:1s:空间限制:32768K ...

  9. Swift-map()跟flatMap()区别

    map()方法介绍 map() 是  Array 提供的方法,通过接收一个函数作为传入参数,对数组中每个元素进行函数变换得到新的结果值.这样只需要提供  X->Y 的映射关系,就能将数组  [X ...

  10. SVM之问题形式化

    >>>SVM之问题形式化 SVM之对偶问题 SVM之核函数 SVM之解决线性不可分 写在SVM之前——凸优化与对偶问题 SVM内容繁多,打算用五篇文章来记述.SVM之问题形式化描述给 ...