一、迭代器的头文件

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

二、迭代器介绍

  • 类似于容器,迭代器也定义了一组公共操作:

    • 一些操作所有迭代器都支持
    • 另外一些只有特定类型的迭代器才支持
  • 例如,ostream_iterator只支持递增、解引用、赋值。vector、string等容器的迭代器除了这些操作之外,还支持递减、关系、算术运算

迭代器的继承关系

  • 可以参阅:https://blog.csdn.net/qq_41453285/article/details/103540156
  • 高层类型的迭代器支持底层类别迭代器的所有操作

三、五大类迭代器

输入迭代器(input iterator)

  • 输入迭代器可以读取序列中的元素
  • 输入迭代器必须支持:
    • 用于比较两个迭代器的相等和不相等运算符(==、!=)
    • 用于推进迭代器的前置和后置递增运算(++)
    • 用于读取元素的解引用运算符(*);解引用只会出现在赋值运算符的右侧
    • 箭头运算符(->)等价于(*it).member,即,解引用迭代器,并提取对象的成员
  • 特点:
    • 输入迭代器只用于顺序访问
    • 对于一个输入迭代器,*it++保证是有效的,但递增它可能导致所有其他指向流的迭代器失效。其结果就是,不能保证输入迭代器的状态可以保存下来并用来访问元素。因此,输入迭代器只能用于单遍扫描算法
    • 例如,算法find和accumlate要求输入迭代器,而istream_iterator是一种输入迭代器

输出迭代器(output iterator)

  • 输出迭代器可以看做输入迭代器功能上的补集——只可以写而不可以读取元素
  • 输出迭代器必须支持:
    • 用于推进迭代器的前置和后置递增运算(++)
    • 解引用运算符(*),只出现在赋值运算符的左侧(向一个已经解引用的输出迭代器赋值,僵尸将值写入它所指的元素)
  • 特点:
    • 我们只能向一个输出迭代器赋值一次
    • 类似输入迭代器,输出迭代器只能用于单遍扫描算法。用作目的位置的迭代器通常都是输出迭代器
    • 例如,copy算法的第三个参数就是输出迭代器,ostream_iterator类型也是输出迭代器

前向迭代器(forward iterator)

  • 可以读写元素
  • 特点:
    • 这些迭代器只能在序列中沿一个方向移动
    • 前进迭代器支持所有输入和输出迭代器的操作,而且可以多次读写同一个元素
    • 因此,我们可以保存前向迭代器的状态,使用前向迭代器的算法可以对序列进行多遍扫描
    • 例如,算法replace要求前向迭代器,forward_list容器上的迭代器是前向迭代器

双向迭代器(binirectional iterator)

  • 可以正向/反向读写序列中的元素
  • 特点:
    • 除了支持所有前向迭代器的操作之外,双向迭代器还支持前置和后置递减 运算符(--)
    • 例如,算法reverse要求双向迭代器,除了forward_list容器之外,其他标准库都提供符合双向迭代器要求的迭代器

随机访问迭代器(random-access iterator)

  • 提供在常量时间内访问序列中任意元素的能力,此类迭代器支持双向迭代器的所有功能
  • 另外还支持:
    • 用于比较两个迭代器相对位置的关系运算符(<、<=、>、>=)
    • 迭代器和一个整数值的加减运算(+、+=、-、-=),计算结果是迭代器在序列中前进(或后退)给定整数个元素后的位置
    • 用于两个迭代器上的减法运算符(-),得到两个迭代器的距离
    • 下标运算符(iter[n]),与*(iter[n])等价

  • 例如,算法sort要求随机访问迭代器。array、deque、string、vector的迭代器都是随机访问迭代器,用于访问内置数组元素的指针也是

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

  1. C++标准库(STL)与泛型编程

    C++标准库(STL)与泛型编程 学习网站: cplusplus.com cppRerference.com 学习书籍: <STL源码剖析> STL体系结构基础介绍 STL六大部件:容器. ...

  2. NDK中C++标准库、STL的配置;Include其他头文件

    原文: Android学习笔记--NDK中C++标准库.STL的配置:Include其他头文件 1.STL的使用,以stlport为例 官方的说法是只需要在Application.mk文件中添加如下一 ...

  3. 2 STL迭代器介绍【前向迭代器、双向迭代器、随机访问迭代器】【迭代器遍历容器】

    文章目录 0 - 前言 1 - 迭代器定义 2 - 迭代器分类 3 - 迭代器使用 0 - 前言 参考:http://c.biancheng.net/view/6675.html 1 - 迭代器定义 ...

  4. STL 之随机访问迭代器

    随机访问迭代器是可以随机访问容器中的元素的双向迭代器.这种迭代器在Vector, Dequeue, string, 和数组类型容器上使用.在双向迭代器上定义的操作也使用于随机访问迭代器. 操作: rA ...

  5. boost::stl_interfaces模块实现最小的随机访问迭代器的测试程序

    boost::stl_interfaces模块实现最小的随机访问迭代器的测试程序 实现功能 C++实现代码 实现功能 boost::stl_interfaces模块实现最小的随机访问迭代器的测试程序 ...

  6. C++标准库与STL简介

    文章目录 1 C++标准库 1.1 C++标准库简介 2 STL简介 2.1 STL介绍 2.2 容器简介 1 C++标准库 重复发明轮子并不是一件有创造性的事,站在巨人的肩膀上解决问题会更加有效! ...

  7. 微软开源其 C++ 标准库实现 STL

    微软近日宣布开源其 MSVC 的 C++ 标准库实现(也就是 STL),该库实现是 MSVC 工具集和 Visual Studio IDE 的一部分. 微软表示开源 STL 可以使开发者随时了解其发展 ...

  8. C++知识点28——使用C++标准库(再谈迭代器)

    一.迭代器的种类 C++中的容器以及泛型算法会大量的使用迭代器 目前已经出现的迭代器有一下几种 1.输出迭代器 (OutputIterator) 输出迭代器类似于输出流(只能向输出流中写入数据),只能 ...

  9. C++ 笔记(19)— 标准模板库(STL容器、STL迭代器、STL算法、STL容器特点、STL字符串类)

    C++ 标准库可以分为两部分: 标准函数库: 这个库是由通用的.独立的.不属于任何类的函数组成的.函数库继承自 C 语言. 面向对象类库: 这个库是类及其相关函数的集合. C++ 标准库包含了所有的 ...

最新文章

  1. CVPR2020 | 利用NAS搜索针对对抗攻击的鲁棒神经网络结构
  2. 第一次接广告的心得,关于广告我怎么看
  3. React之createRef
  4. 华为交换机屏蔽远程计算机,华为交换机远程telnet配置的小问题
  5. 视频跟踪——meanshift算法
  6. conda安装tensorflow-gpu=2.2.0
  7. Star Schema完全参考手册读书笔记二
  8. 大数据时代激活数据管理新思路
  9. java环境安装1359错误_解决The valid characters are defined in RFC 7230 and RFC 3986错误问题...
  10. 自动化测试工具Selenium
  11. 解决“‘pip‘ 不是内部或外部命令,也不是可运行的程序或批处理文件“的问题
  12. 程序员面试金典——番外篇之下一个较大元素II
  13. 总结(6)--- python基础知识点小结(细全)
  14. [编程思想] POP OOP AOP
  15. Spark ML 构建回归模型
  16. 作为使用者对qq拼音输入法和搜狗输入法的评价
  17. 苏宁618强势出圈,差异化竞争能力是杀手锏
  18. php开发gui有啥意义,gui是什么?
  19. 项目经理用一个计算机模型估算成本,项目经理考试培训:成本估算的工具和技术...
  20. [Python从零到壹] 三十六.图像处理基础篇之图像算术与逻辑运算详解

热门文章

  1. 网络舆情分析的三个步骤及具体实施方案
  2. 设置win服务器代理
  3. 关于心理量化的一些思考
  4. 哪款文件比较软件适合程序员
  5. 利用WorkBook实现excel到list的转换
  6. 学习-Java继承和多态之方法重载
  7. 长得类似铁甲小宝的机器人_这部特摄剧除了大神以外,女配角也非常养眼,童年只看机器人系列...
  8. 美团点评2018春招后台开发方向编程题 - 题解
  9. 电脑蓝屏c语言代码大全,Win10电脑卡机遇到蓝屏代码0xc000014c应该怎么办?
  10. 基于matlab的逻辑回归示例