C++ 双向迭代器

17 Mar 2025 | 阅读 2 分钟
  • 双向迭代器支持前向迭代器的所有功能,并且还支持两种递减运算符(前缀和后缀)。
  • 双向迭代器是用于在两个方向上访问元素的迭代器,即朝向末尾和朝向开头
  • 随机访问迭代器也是一个有效的双向迭代器。
  • 许多容器实现了双向迭代器,例如 list、set、multiset、map、multimap。
  • C++ 提供了两种可以在两个方向上移动的非 const 迭代器:iterator 和 reverse_iterator。
  • C++ 双向迭代器具有与前向迭代器相同的功能,唯一的区别是双向迭代器还可以递减。

双向迭代器的属性

假设 x 和 y 是两个迭代器:

属性表达式
双向迭代器是可默认构造、可复制赋值和可销毁的。A x;
A y(x);
y=x;
它可以使用相等或不相等运算符进行比较。x==y
x!=y
它可以被解引用,意味着我们可以使用解引用运算符(*)来检索值。*x
可变迭代器可以作为左值被解引用。*x = t
双向迭代器可以递增。x++
++x
双向迭代器也可以递减。x--
--x

在上表中,'A' 是双向类型,xy 是迭代器类型的对象,而 't' 是迭代器指向的对象。

让我们看一个简单的例子

输出

1 2 3 4 5
5 4 3 2 1

双向迭代器的特性

C++ Bidirectional iterator
  • 相等/不相等运算符:双向迭代器可以使用相等不相等运算符进行比较。只有当两个迭代器指向相同位置时,它们才相等。

假设 'A' 和 'B' 是两个迭代器

  • 解引用:双向迭代器既可以作为左值也可以作为右值被解引用。

假设 'A' 是一个迭代器,'t' 是一个整型变量

  • 可递增:双向迭代器可以使用 operator++() 函数进行递增。
  • 可递减:双向迭代器也可以使用 Operator --() 函数进行递减。

双向迭代器的局限性

  • 关系运算符:相等或不相等运算符可以用于双向迭代器,但其他迭代器不能应用于双向迭代器。

假设 'A' 和 'B' 是两个迭代器

  • 算术运算符:算术运算符不能与双向迭代器一起使用,因为它顺序访问数据。
  • 偏移解引用运算符:双向迭代器不支持偏移解引用运算符或下标运算符 [] 来随机访问元素。

下一主题