STL::iterator迭代器分类

在这里插入图片描述
在这里插入图片描述

1. 输入迭代器:只读,一次传递

为输入迭代器预定义实现只有istream_iterator和istreambuf_iterator,用于从一个输入流istream中读取。一个输入迭代器仅能对它所选择的每个元素进行一次解析,它们只能向前移动。一个专门的构造函数定义了超越末尾的值。总是,输入迭代器可以对读操作的结果进行解析(对每个值仅解析一次),然后向前移动。

2. 输出迭代器:只写,一次传递

这是对输入迭代器的补充,不过是写操作而不是读操作。为输出迭代器的预定义实现只有ostream_iterator和ostreambuf_iterator,用于向一个输出流ostream写数据,还有一个一般较少使用的raw_storage_iterator。他们只能对每个写出的值进行一次解析,并且只能向前移动。对于输出迭代器来说,没有使用超越末尾的值来结束的概念。总之,输出迭代器可以对写操作的值进行解析(对每一个值仅解析一次),然后向前移动。

3. 前向迭代器:多次读/写

前向迭代器包含了输入和输出迭代器两者的功能,加上还可以多次解析一个迭代器指定的位置,因此可以对一个值进行多次读/写。顾名思义,前向迭代器只能向前移动。没有为前向迭代器预定义迭代器。

4. 双向迭代器:operator–

双向迭代器具有前向迭代器的全部功能。另外它还可以利用自减操作符operator–向后一次移动一个位置。由list容器中返回的迭代器都是双向的。

5.随机访问迭代器:类似于一个指针

随机访问迭代器具有双向迭代器的所有功能,再加上一个指针所有的功能(一个指针就是一个随机访问迭代器),除了没有一种“空(null)”迭代器和空指针对应。基本上可以这样说,一个随机访问迭代器就像一个指针那样可以进行任何操作,包括使用操作符operator[]进行索引,加某个数值到一个指针就可以向前或者向后移动若干个位置,或者使用比较运算符在迭代器之间进行比较。

容器的迭代器种类:

在这里插入图片描述
连续空间储存的容器对应的迭代器是随机访问迭代器random_access_iterator_tag,可以每次跨越多个元素(it+n)。非连续储存的容器对应的迭代器是单向迭代器forward_iterator_tag或者双向迭代器bidirectional_iterator_tag,取决于每个结点内部的指针情况,这两种迭代器每次只能移动一位(it++)不能跳跃访问。

迭代器分类对算法的影响:

对于处理不同类型的迭代器,相同的算法可能会有不同的实现方式。
例如:计算两个迭代器的距离的算法,对连续储存的容器其迭代器类型为 random_access_iterator_tag,可将两个迭代器相减得到距离。而非连续储存的容器需要不断将第一个迭代器进行++运算,直到等于第二个迭代器,执行++的步数即为距离。
算法通过萃取机iterator_traits获得迭代器的类型,从而执行不同的处理方法。

逆向迭代器:

是一种迭代器适配器iterator adapter
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值