C ++双向迭代器
从头到尾的方向都有权访问范围的元素序列的迭代器被称为双向迭代器。迭代器可以处理列表映射和集合之类的数据类型。
双向迭代器与转发迭代器具有相同的属性,唯一的区别是它们也可以递减-
是默认可构造的,复制可构造,可分配和可销毁的副本
Xb(a);
b=a;
可以使用等号/不等号运算符比较等效性(当两个迭代器值在相同的基础序列上迭代时,这是有意义的)。
a!=b
可以作为右值取消引用(如果处于可取消引用状态)。
a->m
对于可变的迭代器(非常量迭代器):可以作为左值被取消引用(如果处于可取消引用状态)。
可以递增(如果处于可解除引用的状态)。结果也可以取消引用,也可以是过去的迭代器。
比较相等的两个迭代器,都增加后,保持比较相等。
a++
*a++
可以递减(如果在它之前有可引用的迭代器值)。
A--
*A--
Lvaluesareswappable.
其中X是双向迭代器,a和b是该迭代器类型的对象,t是该迭代器类型所指向的类型的对象(或可以通过解引用X类型的对象而分配给左值的某种其他类型)。
C++中的双向迭代器的概念。
双向迭代器支持转发迭代器的所有功能,还支持前缀和后缀减量运算符。
这种类型的迭代器可以在两个方向上访问元素,例如朝着结束和朝着开始。
随机访问迭代器也是双向迭代器的一种。
双向迭代器具有转发迭代器的功能,但是唯一的区别是此迭代器也可以递减。
Input: 1 2 3 4 5 6 7 8 9 10 Output: 10 9 8 7 6 5 4 3 2 1
示例
#include <iostream> #include<iterator> #include<vector> using namespace std; int main() { vector<int> vec{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; vector<int> ::iterator it; vector<int> :: reverse_iterator rev_it; for(it = vec.begin(); it != vec.end(); it++) cout<<*it<<" "; cout<< endl; for(rev_it = vec.rbegin(); rev_it!= vec.rend(); rev_it++) cout<<*rev_it<<" "; }
输出结果
1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1