1.迭代器的概念
1)迭代器(iterator)是一种用来索引容器内元素的数据类型
2)迭代器不是指针是类模版,表现像指针。它模拟了一些指针的功能, 通过重载指针的一些操作符。本质是封装了原生指针,相当于指针的一种升级。
3)即使是vector,它的迭代器定义如下,也不能说它就是普通指针,vector的迭代器不能相互比较,而指针可以
2.迭代器的种类
根据迭代器所支持的操作,可以把迭代器分为5类:
1) 输入迭代器:是只读迭代器,可以读取容器中的元素
2) 输出迭代器:是只写迭代器,可以写容器中的元素
3) 前向迭代器:兼具输入和输出迭代器的能力,但它不支持operator--,只能向前移动
4) 双向迭代器:前向迭代器的加强,即可向前又可向后移动
5) 随机访问迭代器:有双向迭代器的所有功能,而且,它还涵盖了迭代器的所有算术能力,可进行随机访问,随意移动指定的步数
2.3迭代器支持的运算
1)所有迭代器
p++ 后置自增
++p 前置自增
2)输入迭代器
*p 解引用运算符,作为右值
p->member等价于(*p).member 箭头运算符,提取对象的某成员
p=p1 赋值
p==p1 比较相等
p!=p1 比较不等
3)输出迭代器
*p 解引用,作为左值
p=p1 赋值
4) 前向迭代器
支持输入输出迭代器的所有运算
5)双向迭代器
--p 前置自减
p-- 后置自减
6)随机迭代器
<,<=,>,>= 两个迭代器比较相对位置
+,+=,-,-= 迭代器和一个整数的加减运算,两个迭代器相减
p[n] 下标运算,返回p偏离n指向的元素
2.4各容器支持的迭代器
vector 随机
list 双向
slist 前向
deque 随机
stack 不支持
queue 不支持
heap 不支持
priority_queue 不支持
set、multiset 双向
map、multimap 双向
unordered_map、unordered_set、unordered_multimap、unordered_multiset 双向
hashtable 前向