C++双向迭代器用法

本文概述

  • 双向迭代器的性质
  • 双向迭代器的功能
  • 双向迭代器的局限性
  • 双向迭代器支持正向迭代器的所有功能, 并且还支持两个减量运算符(前缀和后缀)。
  • 双向迭代器是用于在两个方向(即朝向末端和朝向起点)访问元素的迭代器。
  • 随机访问迭代器也是有效的双向迭代器。
  • 许多容器都实现了双向迭代器, 例如列表, 集合, 多集, 映射, 多图。
  • 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”是迭代器指向的对象。
【C++双向迭代器用法】让我们看一个简单的例子:
#include < iostream> #include< iterator> #include< vector> using namespace std; int main() { vector< int> v{1, 2, 3, 4, 5}; // vector declaration vector< int> ::iterator itr; // iterator declaration vector< int> :: reverse_iterator ritr; // reverse iterator declaration for(itr = v.begin(); itr!=v.end(); itr++) { cout< < *itr< < " "; } cout< < '\n'; for(ritr = v.rbegin(); ritr!= v.rend(); ritr++) { cout< < *ritr< < " "; } return 0; }

输出:
1 2 3 4 5 5 4 3 2 1

双向迭代器的功能
C++双向迭代器用法

文章图片
  • 相等/不相等运算符:可以使用相等或不相等运算符比较双向迭代器。仅当两个迭代器都指向相同位置时, 两个迭代器才相等。
假设“ A”和“ B”是两个迭代器:
A==B; A!=B;

  • 取消引用:双向迭代器也可以同时作为左值和右值被解引用。
假设“ 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

  • 偏移解引用运算符:双向迭代器不支持元素的随机访问的偏移解引用运算符或下标运算符[]。

    推荐阅读