<iterator>

std::bidirectional_iterator_tag

struct bidirectional_iterator_tag {}
双向迭代器类别
用于标识迭代器为双向迭代器的空类

双向迭代器


双向迭代器是可用于双向(向末尾和向开头)访问范围中元素序列的迭代器。

所有随机访问迭代器也是有效的双向迭代器

不存在单一类型的双向迭代器:每个容器都可以定义自己的特定迭代器类型,以便遍历该容器并访问其元素。

双向迭代器具有与前向迭代器相同的属性,唯一的区别是它们还可以被递减。

属性有效的表达式
可以默认构造拷贝构造拷贝赋值析构X a;
X b(a);
b = a;
可以使用相等/不等运算符进行等价比较
(当两个迭代器值指向相同的底层序列时才有意义)。
a == b
a != b
可以作为右值解引用(如果处于可解引用状态)。*a
a->m
对于可变迭代器非 const 迭代器
可以作为左值解引用(如果处于可解引用状态)。
*a = t
可以递增(如果处于可解引用状态)。
结果是也可解引用越界迭代器。
两个相等比较的迭代器,在都增加后仍保持相等比较。
++a
a++
*a++
可以递减(如果其前面有一个可解引用的迭代器值)。
--a
a--
*a--
属性有效的表达式
可以默认构造拷贝构造拷贝赋值析构X a;
X b(a);
b = a;
可以使用相等/不等运算符进行等价比较
(当两个迭代器值指向相同的底层序列时才有意义)。
a == b
a != b
可以作为右值解引用(如果处于可解引用状态)。*a
a->m
对于可变迭代器非 const 迭代器
可以作为左值解引用(如果处于可解引用状态)。
*a = t
可以递增(如果处于可解引用状态)。
结果是也可解引用越界迭代器。
两个相等比较的迭代器,在都增加后仍保持相等比较。
++a
a++
*a++
可以递减(如果其前面有一个可解引用的迭代器值)。
--a
a--
*a--
左值是可交换的swap(a,b)

其中 X双向迭代器类型ab 是此迭代器类型的对象,而 t 是由迭代器类型指向的类型(或可分配给由 X 类型对象解引用返回的左值)的对象。

常量迭代器 是不满足输出迭代器要求的迭代器;解引用它们会得到对常量元素的引用(例如 const T&)。

所有双向迭代器也是有效的前向输入迭代器。

另见