- 双向迭代器支持正向迭代器的所有函数,并且还支持两个减量运算符(前缀和后缀)。
- 双向迭代器是用于在两个方向(即,朝向末端并朝向开始)访问元素的迭代器。
- 随机访问迭代器也是有效的双向迭代器。
- 许多集合都实现了双向迭代器,例如列表,集合,多集,映射,multimap。
- C++提供了两个在两个方向上都移动的非常量迭代器:迭代器和反向迭代器。
- C++双向迭代器具有与正向迭代器相同的函数,唯一的区别是双向迭代器也可以递减。
让我们看一个简单的示例:
#include <iostream> #include<iterator> #include<vector> using namespace std; int main() { vector<int> v{1,2,3,4,5}; //向量声明 vector<int> ::iterator itr; //迭代器声明 vector<int> ::reverse_iterator ritr; //反向迭代器声明 for(itr = v.begin();itr!=v.end();itr++) { cout<<*itr<<" "; } cout<< ; for(ritr = v.rbegin();ritr!= v.rend();ritr++) { cout<<*ritr<<" "; } return 0; }
输出:
1 2 3 4 5 5 4 3 2 1
双向迭代器函数

- 等式/不等式运算符 : 可以使用等式或不等式运算符比较双向迭代器。仅当两个迭代器都指向相同位置时,这两个迭代器才相等。
假设" A"和" B"是两个迭代器:
A==B; A!=B;
- 取消引用:双向迭代器也可以同时取消引用为 lvalue 和 rvalue 。
假设" A"是迭代器," t"是整数变量:
*A = t; t = *A
- 可递增:可以使用 operator++()函数来递增双向迭代器。
A++; ++A;
- 可递减:双向迭代器也可以通过使用Operator-()函数来减少。
A--; --A;
双向迭代器局限性:
- 关系运算符:相等或不相等运算符可以与双向迭代器一起使用,但其他迭代器不能应用于双向迭代器。
假设" A"和" B"是两个迭代器:
A==B; //valid A<=B; //invalid
- 算术运算符:算术运算符不能与双向迭代器一起使用,因为它会顺序访问数据。
A+2; //invalid A+1; //invalid
- 偏移解引用运算符:双向迭代器不支持对元素的随机访问使用偏移解引用运算符或下标运算符[]。