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指向的值

原文地址:https://www.cnblogs.com/chen-cai/p/10321559.html