曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4099|回复: 0
打印 上一主题 下一主题

[STL] 迭代器的类型

[复制链接]

716

主题

734

帖子

2946

积分

超级版主

Rank: 9Rank: 9Rank: 9

积分
2946
跳转到指定楼层
楼主
发表于 2014-1-14 14:27:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STL 定义了 5 种迭代器,它们分别是输入迭代器、输出迭代器、正向迭代器和随机访问迭代器。

1. 输入迭代器
“输入”是从程序角度来说的,即来自容器的信息被视为输入。输入迭代器可被程序用来读取容器中的信息。也就是说,对输入迭代器解除引用,可以使程序读取容器中的值,但不一定能让程序修改这些值。因此,需要输入迭代器的算法将不会修改容器中的值。

输入迭代器必须能够访问容器中所有的值,这是通过支持 ++ 运算符来实现的。

基于输入迭代器的任何算法都应当是单通行(single-pass)的,不依赖于前一次遍历时的迭代器值,也不依赖于本次遍历中前面的迭代器值。

注意,输入迭代器是单向迭代器,可以递增,但不能倒退。

2. 输出迭代器
“输出” 是指用于将信息从程序传输给容器的迭代器,也就是程序的输出是容器的输入。与输入迭代器类似,只是通过解除引用让程序能够修改容器值,而不能读取。也许会奇怪,能够写,却不能读。发送到显示器上的输出就是这种情况;cout 可以向显示器上发送字符流,但不能从屏幕上读取。

简而言之,对于单通行、只读算法,可以使用输入迭代器;而对于单通行,只写算法,则可以使用输出迭代器。

3. 正向迭代器
与输入/输出迭代器类似,正向迭代器只使用 ++ 运算符来遍历容器,所以它每次沿容器向前移动一个元素。与输入/输出迭代器不同的是,它总是按相同的顺序遍历一系列值。

将正向迭代器递增后,仍然可以对前面的迭代器值解除引用(如果保存了它),并可以得到相同的值。这些特征使得多次同行算法成为可能。

正向迭代器读取和修改数据,也可以使得它只能读取数据:
  1. int *pirw;
  2. const int * pir;
复制代码
4. 双向迭代器
假设算法需要能够双向遍历容器,那么使用双向迭代器,它同时支持两种(前缀 和 后缀)递减运算符(--)。

5. 随机访问迭代器
有些算法(如标准排序和二分检索)要求能够直接跳到容器中的任何一个元素,这样叫做随机访问,此时就需要随机访问迭代器。随机访问迭代器具有双向迭代器所有特性,同时添加了支持随机访问的操作和用于对元素进行排序的关系运算符。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-4-30 12:27 , Processed in 0.056670 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表