C++迭代器(STL迭代器)
迭代器按照定义方式可以分为以下四种:
(1)正向迭代器,定义方法如下:
容器类名::iterator 迭代器名;
(2)常量正向迭代器,定义方法如下:
容器类名::const_iterator 迭代器名;
(3)反向迭代器,定义方法如下:
容器类名::reverse_iterator 迭代器名;
(4)常量反向迭代器,定义方法如下:
容器类名::const_reverse_iterator 迭代器名;
通过迭代器,我们可以读取它指向的元素,*迭代器名 就表示迭代器所指向的元素,通过非常量迭代器还能修改其指向的元素
迭代器都可以进行++操作,反向迭代器和正向迭代器的区别在于:
对正向迭代器进行++操作时,迭代器会指向容器中的后一个元素;
对反向迭代器进行++操作时,迭代器会指向容器中的前一个元素;
注意:容器适配器stack,queue,priority_queue 没有迭代器。
常用的迭代器按功能强弱分为:输入,输出,正向,双向,随机访问 五种。
(1)正向迭代器
假设p是一个正向迭代器,则p支持以下操作:
++p,p++,*p,两个迭代器可以进行相互赋值,以及==,!=比较
(2)双向迭代器
双向迭代器具有正向迭代器的所有功能,并且可以进行 --p 和 p-- 的操作
(3)随机访问迭代器
随机访问迭代器具有双向迭代器的所有功能,并且还可以进行以下操作,假设i是一个整型变量或常量:
p+=i:p往后移动i个元素
p-=i:p往前移动i个元素
p+i:返回p后面第i个元素的迭代器
p-i:返回p前面的第i个元素的迭代器
p[i]:返回p后面第i个元素的引用
两个随机访问迭代器还可以进行<,>,<=,>=,- 的操作
容器 迭代器功能
vector 随机访问
deque 随机访问
list 双向
set/multiset 双向
map/multimap 双向
stack 不支持迭代器
queue 不支持迭代器
priority_queue 不支持迭代器
迭代器的辅助函数:
advance(p,n):使迭代器p向前或向后移动n个元素
distance(p,q):计算两个迭代器之间的距离,即迭代器p经过多少次++操作后和迭代器q相等,如果调用时p已经指向q的后面,则该函数会陷入死循环
iter_swap(p,q):用于交换两个迭代器p,q指向的值