五类迭代器以下:算法
一、输入迭代器:只读,一次传递
为输入迭代器预约义实现只有istream_iterator和istreambuf_iterator,用于从一个输入流istream中读取。一个输入迭代器仅能对它所选择的每一个元素进行一次解析,它们只能向前移动。一个专门的构造函数定义了超越末尾的值。老是,输入迭代器能够对读操做的结果进行解析(对每一个值仅解析一次),而后向前移动。
二、输出迭代器:只写,一次传递
这是对输入迭代器的补充,不过是写操做而不是读操做。为输出迭代器的预约义实现只有ostream_iterator和ostreambuf_iterator,用于向一个输出流ostream写数据,还有一个通常较少使用的raw_storage_iterator。他们只能对每一个写出的值进行一次解析,而且只能向前移动。对于输出迭代器来讲,没有使用超越末尾的值来结束的概念。总之,输出迭代器能够对写操做的值进行解析(对每个值仅解析一次),而后向前移动。
三、前向迭代器:屡次读/写
前向迭代器包含了输入和输出迭代器二者的功能,加上还能够屡次解析一个迭代器指定的位置,所以能够对一个值进行屡次读/写。顾名思义,前向迭代器只能向前移动。没有为前向迭代器预约义迭代器。
四、双向迭代器:operator--
双向迭代器具备前向迭代器的所有功能。另外它还能够利用自减操做符operator--向后一次移动一个位置。由list容器中返回的迭代器都是双向的。
五、随机访问迭代器:相似于一个指针
随机访问迭代器具备双向迭代器的全部功能,再加上一个指针全部的功能(一个指针就是一个随机访问迭代器),除了没有一种“空(null)”迭代器和空指针对应。基本上能够这样说,一个随机访问迭代器就像一个指针那样能够进行任何操做,包括使用操做符operator[]进行索引,加某个数值到一个指针就能够向前或者向后移动若干个位置,或者使用比较运算符在迭代器之间进行比较。函数
迭代器类别spa |
说明指针 |
输入迭代器索引 |
从容器中读取元素。输入迭代器只能一次读入一个元素向前移动,输入迭代器只支持一遍算法,同一个输入迭代器不能两遍遍历一个序列ci |
输出迭代器it |
向容器中写入元素。输出迭代器只能一次一个元素向前移动。输出迭代器只支持一遍算法,统一输出迭代器不能两次遍历一个序列io |
正向迭代器table |
组合输入迭代器和输出迭代器的功能,并保留在容器中的位置容器 |
双向迭代器 |
组合正向迭代器和逆向迭代器的功能,支持多遍算法 |
随机访问迭代器 |
组合双向迭代器的功能与直接访问容器中任何元素的功能,便可向前向后跳过任意个元素 |
迭代器的操做:
每种迭代器都可进行包括表中前一种迭代器可进行的操做。迭代器的操做本质上是经过重载运算符来实现的,迭代器支持何种操做和可以执行什么运算是由迭代器所重载的运算符来决定的。
迭代器类型 | 操做类型 | 说明 |
全部迭代器 |
p++ ++p |
后置自增迭代器 前置自增迭代器s's |
输入迭代器 |
*p p=p1 p==p1 p!=p1 |
复引用迭代器,做为右值 将一个迭代器赋给另外一个迭代器 比较迭代器的相等性 比较迭代器的不等性 |
输出迭代器 |
*p p=p1 |
复引用迭代器,做为左值 将一个迭代器赋给另外一个迭代器 |
正向迭代器 |
提供输入输出迭代器的全部功能 |
|
双向迭代器 |
--p p-- |
前置自减迭代器 后置自减迭代器 |
随机访问迭代器 |
p+=i p-=i p+i p-i p[i] p<p1 p<=p1 p>p1 p>=p1 |
将迭代器递增i位 将迭代器递减i位 在p位加i位后的迭代器 在p位减i位后的迭代器 返回p位元素偏离i位的元素引用 若是迭代器p的位置在p1前,返回true,不然返回false p的位置在p1的前面或同一位置时返回true,不然返回false 若是迭代器p的位置在p1后,返回true,不然返回false p的位置在p1的后面或同一位置时返回true,不然返回false |
只有顺序容器和关联容器支持迭代器遍历,各容器支持的迭代器的类别以下:
容器 |
支持的迭代器类别 |
vector |
随机访问 |
deque |
随机访问 |
list |
双向 |
set |
双向 |
multiset |
双向 |
map |
双向 |
multimap |
双向 |
stack |
不支持 |
queue |
不支持 |
priority_queue |
不支持 |