五类迭代器如下:
1、输入迭代器:只读,一次传送
为输入迭代器预定义完成只要istream_iterator和istreambuf_iterator,用于从一个输入流istream中读取。一个输入迭代器仅能对它所选择的每个元素停止一次解析,它们只能向前挪动。一个特地的结构函数定义了超越末尾的值。总是,输入迭代器能够对读操作的结果停止解析(对每个值仅解析一次),然后向前挪动。
2、输出迭代器:只写,一次传送
这是对输入迭代器的补充,不过是写操作而不是读操作。为输出迭代器的预定义完成只要ostream_iterator和ostreambuf_iterator,用于向一个输出流ostream写数据,还有一个普通较少运用的raw_storage_iterator。他们只能对每个写出的值停止一次解析,并且只能向前挪动。关于输出迭代器来说,没有运用超越末尾的值来完毕的概念。总之,输出迭代器能够对写操作的值停止解析(对每一个值仅解析一次),然后向前挪动。
3、前向迭代器:屡次读/写
前向迭代器包含了输入和输出迭代器两者的功用,加上还能够屡次解析一个迭代器指定的位置,因而能够对一个值停止屡次读/写。望文生义,前向迭代器只能向前挪动。没有为前向迭代器预定义迭代器。
4、双向迭代器:operator–
双向迭代用具有前向迭代器的全部功用。另外它还能够应用自减操作符operator–向后一次挪动一个位置。由list容器中返回的迭代器都是双向的。
5、随机访问迭代器:相似于一个指针
随机访问迭代用具有双向迭代器的一切功用,再加上一个指针一切的功用(一个指针就是一个随机访问迭代器),除了没有一种“空(null)”迭代器和空指针对应。根本上能够这样说,一个随机访问迭代器就像一个指针那样能够停止任何操作,包括运用操作符operator[]停止索引,加某个数值到一个指针就能够向前或者向后挪动若干个位置,或者运用比拟运算符在迭代器之间停止比拟。
迭代器类别
阐明
输入迭代器
沉着器中读取元素。输入迭代器只能一次读入一个元素向前挪动,输入迭代器只支持一遍算法,同一个输入迭代器不能两遍遍历一个序列
输出迭代器
向容器中写入元素。输出迭代器只能一次一个元素向前挪动。输出迭代器只支持一遍算法,统一输出迭代器不能两次遍历一个序列
正向迭代器
组合输入迭代器和输出迭代器的功用,并保存在容器中的位置
双向迭代器
组合正向迭代器和逆向迭代器的功用,支持多遍算法
随机访问迭代器
组合双向迭代器的功用与直接访问容器中任何元素的功用,即可向前向后跳过恣意个元素
迭代器的操作:
每种迭代器均可停止包括表中前一种迭代器可停止的操作。迭代器的操作实质上是经过重载运算符来完成的,迭代器支持何种操作和可以执行什么运算是由迭代器所重载的运算符来决议的。
迭代器类型 操作类型 阐明
一切迭代器
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
不支持