Bootstrap

迭代器种类

c++中的几种迭代器(迭代器是广义指针)

一、输入迭代器

1、首先明白,输入迭代器的输入是从程序的角度出发的,来自容器的信息被程序视为输入,就像来自键盘的信息对程序来说是输入一样。 因此,输入迭代器被程序用来读取容器中的信息。
2、对于有些容器来说,输入迭代器不一定能够用来修改容器中的值。
3、输入迭代器不能保证每一次遍历容器时的顺序不变。
4、输入迭代器是单项迭代器,只能递增,不能倒退。
5、输入迭代器在递增之后,不能保证其之前的值依然可以被解除引用。
6、基于输入迭代器的算法应当是单通行的,不依赖于前一次遍历时的迭代器值,也不依赖于本次遍历中前面的值。

二、输出迭代器

1、同样的,输出迭代器的“输出”也是从程序的角度出发的,即程序对容器的输出就是容器的输入。
2、输出迭代器只能用来解除引用来进行修改容器内的值,就像cout一样,cout可以将信息输出到屏幕上显示,也可以修改发送到显示器的字符流,但不能从屏幕上读取信息。

tip:单通行,只读算法可以使用输入迭代器;单通行,只写算法可以使用输出迭代器。

三、正向迭代器

1、正向迭代器只使用++运算符来遍历容器,所以它每次移动都是沿容器向前移动一个元素
2、正向迭代器于输入、输出迭代器不同的是:正向迭代器总是按照相同的顺序遍历容器的;正向迭代器在递增之后,任然可以对前面的迭代器值进行解除引用(如果保存了的话·)。
3、正向迭代器可以使得能够读取和修改数据,也可以使得只能读取或修改或修改数据。

四、双向迭代器

1、双向迭代器支持正向迭代器的所有特征
2、双向迭代器同时支持两种(前缀和后缀)递减运算符,使得其能够有(–pr)这种操作

五、随机访问迭代器

1、随机访问迭代器支持双向迭代器所有的特性
2、随机访问迭代器支持随机访问的特性,满足需要进行随机访问的算法(例如:标准排序、二分法排序)

Tip:

1、有多种迭代器可以在编写算法时尽可能地使用要求最低的迭代器,并让它使用于容器的最大区间。
2、各种迭代器的类型时不确定的,而只是一种概念性描述。
3、每种容器中都有一个类级typedef名称——iterator,因此,vector< int> 迭代器的类型是vector< int>::iterator
3、vector迭代器是随机访问迭代器,list迭代器是双向迭代器。
4、指针满足所有的迭代器要求。

;