标准模板库(The Standard
Template Library, STL)定义了五种迭代器。下面的图表画出了这几种:
input output
\ /
forward
|
bidirectional
|
random access
要注意,上面这图表并不是表明它们之间的继承关系:而只是描述了迭代器的种类和接口。处于图表下层的迭代器都是相对于处于图表上层迭代器的扩张集。例如:forward迭代器不但拥有input和output迭代器的所有功能,还拥有更多的功能。
各个迭代器的功能如下:
迭代器类别
|
说明
|
输入
|
从容器中读取元素。输入迭代器只能一次读入一个元素向前移动,输入迭代器只支持一遍算法,同一个输入迭代器不能两遍遍历一个序列
|
输出
|
向容器中写入元素。输出迭代器只能一次一个元素向前移动。输出迭代器只支持一遍算法,统一输出迭代器不能两次遍历一个序列
|
正向
|
组合输入迭代器和输出迭代器的功能,并保留在容器中的位置
|
双向
|
组合正向迭代器和逆向迭代器的功能,支持多遍算法
|
随机访问
|
组合双向迭代器的功能与直接访问容器中任何元素的功能,即可向前向后跳过任意个元素
|
迭代器的操作:
每种迭代器均可进行包括表中前一种迭代器可进行的操作。
迭代器操作
|
说明
|
所有迭代器
|
p++
|
后置自增迭代器
|
++p
|
前置自增迭代器
|
输入迭代器
|
*p
|
复引用迭代器,作为右值
|
p=p1
|
将一个迭代器赋给另一个迭代器
|
p==p1
|
比较迭代器的相等性
|
p!=p1
|
比较迭代器的不等性
|
输出迭代器
|
*p
|
复引用迭代器,作为左值
|
p=p1
|
将一个迭代器赋给另一个迭代器
|
正向迭代器
|
提供输入输出迭代器的所有功能
|
双向迭代器
|
--p
|
前置自减迭代器
|
p--
|
后置自减迭代器
|
随机迭代器
|
p+=i
|
将迭代器递增i位
|
p-=i
|
将迭代器递减i位
|
p+i
|
在p位加i位后的迭代器
|
p-i
|
在p位减i位后的迭代器
|
p[i]
|
返回p位元素偏离i位的元素引用
|
p<p1
|
如果迭代器p的位置在p1前,返回true,否则返回false
|
p<=p1
|
p的位置在p1的前面或同一位置时返回true,否则返回false
|
p>p1
|
如果迭代器p的位置在p1后,返回true,否则返回false
|
p>=p1
|
p的位置在p1的后面或同一位置时返回true,否则返回false
|
只有顺序容器和关联容器支持迭代器遍历,各容器支持的迭代器的类别如下:
容器
|
支持的迭代器类别
|
vector
|
随机访问
|
deque
|
随机访问
|
list
|
双向
|
set
|
双向
|
multiset
|
双向
|
map
|
双向
|
multimap
|
双向
|
stack
|
不支持
|
queue
|
不支持
|
priority_queue
|
不支持
|