C++ 双向迭代器
- 双向迭代器支持所有正向迭代器的功能,并且支持两个 递减运算符 (前缀和后缀)。
- 双向迭代器是用于在两个方向上访问元素的迭代器,即 向尾部和向头部 。
- 随机访问迭代器 也是有效的双向迭代器。
- 许多容器实现了双向迭代器,例如list、set、multiset、map、multimap。
- C++提供了两个非常量迭代器,分别是正向迭代器和反向迭代器。
- C++双向迭代器与正向迭代器具有相同的功能,唯一的区别是双向迭代器还可以进行递减操作。
双向迭代器的特性
假设x和y是两个迭代器 :
特性 | 表达式 |
---|---|
双向迭代器是可默认构造、可复制赋值和可销毁的。 | A x; A y(x); y=x; |
可以使用相等或不相等运算符进行比较。 | x==y x!=y |
可以通过解引用运算符(* )来获取值。 |
*x |
可以将可变迭代器解引用为左值。 | *x = t |
双向迭代器可以递增。 | x++ ++x |
双向迭代器也可以递减。 | x-- \--x |
在上面的表格中, ‘A’是双向类型,x 和 y 是迭代器类型的对象,’t’是迭代器所指向的对象。
让我们看一个简单的示例:
输出:
双向迭代器的特点
- 相等/不相等运算符 :可以通过使用 相等 或 不相等运算符 来比较双向迭代器。只有当两个迭代器指向相同的位置时,它们才相等。
假设’A’和’B’是这两个迭代器:
- 解引用: 双向迭代器可以同时解引用为 左值 和 右值 。
假设’A’是一个迭代器,’t’是一个整数变量:
- Incrementable : 可以使用 operator++() 函数来递增一个双向迭代器。
- 可递减:双向迭代器也可以通过使用Operator –()函数来递减。
双向迭代器的限制
- 关系运算符 :双向迭代器可以使用相等或不相等运算符,但其他迭代器不能应用于双向迭代器。
假设’A’和’B’是两个迭代器:
- 算术运算符 :算术运算符不能与双向迭代器一起使用,因为它以顺序访问数据。
- 偏移引用运算符 :双向迭代器不支持偏移引用运算符或下标运算符[]用于随机访问元素。