迭代器

  • 能力:行进和存取的能力

Input迭代器

  • 一次一个向前读取元素,按此顺序一个一个返回元素
  • 例子:从标准输入装置(键盘) 读取数据,同一个数据不会被读取两次,流水一样,指向的是逻辑位置
  • 使用前置式递增运算符 ++x 替代后置式递增运算符x++,前者不需要返回旧的数值,不需要花费一个对象来保存旧的数值
  • Input无递减运算操作符号

Output输出迭代器

  • 和input迭代器相反,作用是将元素数值一个一个写入。不可以使用输出迭代器对同一序列进行两次遍历写入、
  • operator* 只有在赋值语句的左手边才会有效
  • 输出迭代器没有比较操作,无法检测 输出迭代器是否有效,或者写入数据是否成功
  • 例子:inserters用于将元素插入到容器内的一种迭代器,对其赋予一个新的数值,就会将其安插在容器内部,元素之前不会被覆盖

 Forward (前向)迭代器

  • forward前向迭代器是 input(全部功能)和output(部分功能)迭代器的结合。
  • 区别于输出迭代器,前向迭代器可以多次指向同一群集中的同一个元素,并可以多次处理同一个元素
// Ok for output iterators
// Error for forward iterators
while(true){*pos = foo();++pos;
}// Ok for forward iterators
// Error for output iterators
while(pos != coll.end()){*pos = foo();++pos;
}
  • forward迭代器提领数据之前需要确保数据有效,如果使用while(true),就会出现错误,因为forward会访问 end()对应的元素,引发错误
  • 输出迭代器不可以使用 这个循环 while(pos != coll.end())   ,因为其没有定义operator!=

Bidirectional

Random Access (随机存取)迭代器

  • 需要提供迭代器的算数运算,类似于指针的算数运算,也就是加减某一个特定的偏移量,能处理距离问题,使用诸如 < >等相互关系运算符进行比较
  • 支持随机存取迭代器的对象和型别:可随机存取的容器(vector\deque)、strings(字符串、string、wstring)、一般的array(指针)

  • 只有是随机存取迭代器才可以使用operator < 作为循环的结束与否的判断条件
  • 代码一定要严谨:比如(coll.end()-1)如果群集为空,便会访问到begin()之前的数据,出现错误;
  • 下面的代码可能出现问题,vector迭代器可能被实例化为一般的指针,考虑到C++不允许你修改任何基本型别的暂时值(包括指针),但是struct和class可以,因此使用辅助对象

  • strings迭代器也常会被实例化为一般的字符指针

迭代器相关的辅助函数

  • advance() 、distance() 适用于random access迭代器,前进后退以及处理迭代器之间的距离
  • iter_swap适用于迭代器的数值交换

 

迭代器配接器

  • 逆向模式、安插模式、流模式

逆向模式

  • 重新定义递增和递减运算,行为倒置

 

Insert迭代器

  • 将赋值新值转化为安插新值

 

 

 

 

 

 

Input stream

 

 

 

 

 

缺省调用,后面三个数值均使用默认值

C++标准库 第七章 STL迭代器相关推荐

  1. C++入门到精通 ——第七章 STL标准模板库大局观

    七.STL标准模板库大局观 Author: XFFer_ 先分享一本 <C++ 标准库 第二版> ,望在STL的道路上从入门到放弃!(开玩笑的啦,愈行愈远~) 链接: https://pa ...

  2. C++_泛型编程与标准库(七)

    C++_泛型编程与标准库(七) 参考:<侯捷泛化编程与标准库>.VC2019 图中标红部分为自己的笔记理解 1.深度探索vector 笔者觉得在最新的VC2019下不是二倍增长,虽然是几何 ...

  3. 《C++标准库》学习笔记 — STL —流

    <C++标准库>学习笔记 - STL -流 一.操控器 1.原理 2.自定义操控器 3.控制输入的宽度 二.自定义 I/O 操作符 1.重载输出操作符 2.输入操作符 三.自定义格式化标志 ...

  4. C++(标准库):26---STL迭代器之(迭代器的5大种类(输出迭代器、输入迭代器、向前迭代器、双向迭代器、随机访问迭代器))

    一.迭代器的头文件 所有的容器都定义有自己的iterator类型,因此如果单单使用容器,只需要包含对应容器的头文件即可 不过有些特殊的iterator,被定义在头文件<iterator>中 ...

  5. c++标准库第五章通用工具5.1Pari和Tuple

    一.pair 提供了直接访问对应数据成员的能力,因为pair是struct而不是class,默认所有成员都是public 二.所有元素都相等,这两个pair对象才相等 三.如果first相等,才继续比 ...

  6. Python 标准库之 fileinput 和 文件迭代器

    1. 使用 fileinput 进行迭代 fileinput 模块可以对一个或多个文件中的内容进行迭代.遍历等操作.该模块的 input() 函数有点类似文件 readlines 函数,但区别明显: ...

  7. python中函数包括标准库函数吗_Python语言和标准库(第二章:函数)

    a-如何创建函数. b-给出一些指导原则,帮助思考如何创建和组织程序以使用函数. c-如何编写函数,使随后可以询问它们的工作方式和实现的功能. 2.1将程序放在单独的文件里 为了更加方便,从现在开始, ...

  8. JavaScript权威指南 第11章JavaScript标准库

    JavaScript权威指南 第11章JavaScript标准库 第11章 JavaScript标准库 11.1 集合与映射 11.1.1 Set类 11.1.2 Map类 11.1.3 WeakMa ...

  9. java stl stack_C++标准库之stack

    C++库以提供"模板"为主.所谓模板,是指不必预先制定类型的函数或类.我们可以借助STL(标准模板库 Standard Template Library, STL)提供的高效算法来 ...

最新文章

  1. CentOS 6.5下SSH总提示Warning: Permanently added '****' (RSA) to the list of known hosts.
  2. springmvc + jquery 错误.ClassNotFoundException: org.apache.taglibs.standard.tlv.JstlCoreTLV
  3. 深度学习100例 - 卷积神经网络(Inception V3)识别手语 | 第13天
  4. python自动控制生产线输送线_一个关于自动化装配生产线结构组成案例,易懂干货...
  5. js回调函数的理解(轉)
  6. 使用Delphi7构建工商银行电子口令密码查找助手
  7. 【2016年第6期】数据产品在线定制平台的探索实践
  8. JAVA中 fastjson两个JSONArray叠加,合并 ,方法 addAll()
  9. 如何真正让小程序,WebRTC和APP互通连麦直播
  10. Eclipse创建web项目
  11. 2019APMCM亚太数学建模题目
  12. 任意类型变量转换成char类型——sprintf函数使用方法
  13. linux操作系统安装教程图解【图文教程】
  14. mysql 断开的管道_java.net.SocketException: 断开的管道 (Write failed) 错误,数据库隔一段时间就断开的问题...
  15. Edge浏览器检查更新时出错: 无法创建该组件(错误代码 3: 0x80004002 -- system level)如何更新
  16. Android存储之MediaStore的使用
  17. Android-PickerView系列之封装篇(三)
  18. java留言板_java实现留言板功能实例
  19. linux_bochs的安装
  20. UE4 手柄映射设置

热门文章

  1. string 找出所有数字 index_发现规律,解决整数转罗马数字
  2. synchronized原理_synchronized 关键字底层原理
  3. 笨办法学linux dhcp,iptables使用指南(上)
  4. 【转】C++ _T()函数和_L()函数介绍
  5. 【转】VS TFS源码分析软件PATFS使用方法一:配置团队项目
  6. 第二十一节:ADO层次上的海量数据处理方案(SqlBulkCopy类插入和更新)
  7. 【转】1.SharePoint服务器端对象模型 之 对象模型概述(Part 1)
  8. android虚拟电话号码,为何安卓手机坚持虚拟按键?这才是原因
  9. win10固态硬盘分区 整数_惠普HP笔记本Win10改Win7系统教程
  10. 【CodeForces - 195A】Let's Watch Football (追及问题,模拟)