1 对于Vector,迭代器跟索引差别不大

for ( int i=0; i < vecVector.size(); i++ ){..}
for (auto iter = vecVector.begin(); iter != vecVector.end(); iter++){...
}

但是,仅仅可以对支持 operator[](std::size_t)的容器使用索引

2 但是在vector中删除、插入元素,迭代器比索引更加方便

some_iterator = some_vector.begin();
while (some_iterator != some_vector.end()){if (/* some condition */){some_iterator = some_vector.erase(some_iterator);// some_iterator now positioned at the element after the deleted element}else{if (/* some other condition */){some_iterator = some_vector.insert(some_iterator, some_new_value);// some_iterator now positioned at new element}++some_iterator;}}

3 迭代器让你的代码更加通用
比如:

typedef std::vector<int> Container ;void doSomething(Container & p_aC){for(Container::iterator it = p_aC.begin(), itEnd = p_aC.end(); it != itEnd; ++it){int & i = *it ; // i is now a reference to the value iterated// do something with "i"}}

如果,使用list替代上面的vector,那么迭代器的优势就显现出来了。

4 更重要的是,迭代器用于算法

copy(v.begin(), v.end(), l.begin());for (auto it = v.begin(); it != v.end(); ++it) {// if the current index is needed:auto i = std::distance(v.begin(), it);// access element as *it// any code including continue, break, return}

5 迭代器更具有oop思想

6 模板编程

template <class Container>
double product( const Container & container )
{Container::iterator i = container.begin();double prod = 1;while ( i != container.end() ) prod *= *i++;return prod;
}

Iterators make your code more generic.

for_each + lambda

std::for_each(v.begin(), v.end(), [](T const& elem) {// if the current index is needed:auto i = &elem - &v[0];// cannot continue, break or return out of the loop});

Why use iterators?相关推荐

  1. 迭代器报“vector iterators incompatible”错的几种可能

    错误1: vector<int > v1;for (vector<int>::iterator it= v1.begin(); it != v1.end(); it++) // ...

  2. boost::iterators::minimum_category用法的测试程序

    boost::iterators::minimum_category用法的测试程序 实现功能 C++实现代码 实现功能 boost::iterators::minimum_category用法的测试程 ...

  3. C++ Iterators(迭代器)

    Iterators迭代器 C++ Iterators(迭代器) 迭代器的描述 对vector容器对象生成和使用了迭代器 C++ Iterators(迭代器) 迭代器可被用来访问一个容器类的所包函的全部 ...

  4. ES6中的新特性:Iterables和iterators

    文章目录 简介 什么是iteration Iterable对象 普通对象不是可遍历的 自定义iterables 关闭iterators 总结 简介 为了方便集合数据的遍历,在ES6中引入了一个iter ...

  5. [Guava]-使用Iterators进行分组时遇见的坑

    2019独角兽企业重金招聘Python工程师标准>>> 平常我们需要对一个大的list进行分批操作,一般使用Iterators#partition和paddedPartition方法 ...

  6. stream iterators源代码详解

    所谓stream iterators,可以将迭代器绑定到一个stream(数据流)对象身上.绑定istream对象(例如:std:cin),称为 istream_iterator,拥有输入能力.乍听之 ...

  7. QT学习笔记(九):遍历容器-迭代器(iterators)

    QT学习笔记(九):遍历容器-迭代器(iterators) 遍历容器 : 1.Jave风格: 2.STL风格: 3.foreach 关键字: 遍历容器 : 遍历一个容器可以使用迭代器(iterator ...

  8. (原)使用vectot的.end()报错:iterators incompatible

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5070672.html 参考网址: http://blog.csdn.net/yxnyxnyxnyxny ...

  9. 第三章 迭代器(iterators)概念与traits编程技法

    迭代器(iterators)概念与traits编程技法 3.1 迭代器设计思想--STL关键所在 3.2 迭代器(iterators)是一种smart pointe 3.3 迭代器相应型别(assoc ...

  10. mmsegmentation教程2:如何修改loss函数、指定训练策略、修改评价指标、指定iterators进行val指标输出

    简介 在mmseg教程1中对如何成功在mmseg中训练自己的数据集进行了讲解,那么能跑起来,就希望对其中loss函数.指定训练策略.修改评价指标.指定iterators进行val指标输出等进行自己的指 ...

最新文章

  1. Wireshark抓包与常见问题解决
  2. 标志寄存器的详细解释
  3. spring boot actuator服务监控与管理
  4. FMS3系列(二):创建可交互的FMS连接--I can say:Hello World
  5. TensorFlow学习笔记(十八)tf.reshape矩阵变形
  6. 优化MySQL,还是使用缓存?
  7. python系统提供构造函数传入参数_python类变量与构造函数的使用
  8. 32位dll转64位工具_如何在64位系统中运行32位或16位程序
  9. 将pandas中Dataframe数据转换为二维数组array
  10. UiModeManager设置夜间模式和行车模式
  11. office visio 2007 画流程图
  12. 爬虫福利二之妹子图网批量下载MM
  13. 2022腾讯云学生服务器价格申请认证及购买攻略
  14. idea toggle offline mode
  15. 贼好用的对比工具--BeyondComper
  16. c语言网络字节序整数,c语言中网络字节序和主机字节序的转换
  17. Python爬取码市项目
  18. 视频教程-德国Vue.js2终极开发教程(含Vue路由和Vuex)-Vue
  19. __builtin_函数
  20. 微前端在小米 CRM 系统的实践

热门文章

  1. 预见2020|第二届中国区块链产业经济年会在国际金融博物馆召开
  2. 大疆经纬M600 Pro 行业无人机应用特点
  3. PS教程!手把手教你打造一个配色小清新的地图图标
  4. 关于 SQL Error: 1146, SQLState: 42S02的解决方案
  5. 基于 Spring、SpringMVC、MyBatis 的熊猫书屋系统
  6. 我的世界服务器自动跳跃,我的世界自动跳跃怎么开 | 手游网游页游攻略大全
  7. H264 的视频编码层的错误恢复
  8. 利用SM30表维护事件实现保存校验
  9. 一段简单的网页返回顶部和返回底部代码(html+css+jquery)
  10. 用Kotlin撸一个图片压缩插件-插件基础篇(二)