21-迭代器层次结构
16.4.3 迭代器层次结构
您可能已经注意到,迭代器类型形成了一个层次结构。正向迭代器具有输入迭代器和输出迭代器的全部功能,同时还有自己的功能;双向迭代器具有正向迭代器的全部功能,同时还有自己的功能;随机访问迭代器具有正向迭代器的全部功能,同时还有自己的功能。表16.4总结了主要的迭代器功能。其中,i为迭代器,n为整数。
| 迭代器功能 | 输入 | 输出 | 正向 | 双向 | 随 机 访 问 | | :----- | :----- | :----- | :----- | :----- | :----- | :----- | :----- | | 解除引用读取 | 有 | 无 | 有 | 有 | 有 | | 解除引用写入 | 无 | 有 | 有 | 有 | 有 | | 固定和可重复排序 | 无 | 无 | 有 | 有 | 有 | | ++i i++ | 有 | 有 | 有 | 有 | 有 | | − −i i − − | 无 | 无 | 无 | 有 | 有 | | i[n] | 无 | 无 | 无 | 无 | 有 | | i + n | 无 | 无 | 无 | 无 | 有 | | i - n | 无 | 无 | 无 | 无 | 有 | | i + = n | 无 | 无 | 无 | 无 | 有 | | i − = n | 无 | 无 | 无 | 无 | 有 |
根据特定迭代器类型编写的算法可以使用该种迭代器,也可以使用具有所需功能的任何其他迭代器。所以具有随机访问迭代器的容器可以使用为输入迭代器编写的算法。
为何需要这么多迭代器呢?目的是为了在编写算法尽可能使用要求最低的迭代器,并让它适用于容器的最大区间。这样,通过使用级别最低的输入迭代器,find()函数便可用于任何包含可读取值的容器。而sort()函数由于需要随机访问迭代器,所以只能用于支持这种迭代器的容器。
注意,各种迭代器的类型并不是确定的,而只是一种概念性描述。正如前面指出的,每个容器类都定义了一个类级typedef名称——iterator,因此vector