C++ 双向迭代器

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’是双向类型,xy 是迭代器类型的对象,’t’是迭代器所指向的对象。

让我们看一个简单的示例:

#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
  • Incrementable : 可以使用 operator++() 函数来递增一个双向迭代器。
A++;
++A;
  • 可递减:双向迭代器也可以通过使用Operator –()函数来递减。
A--;
--A;

双向迭代器的限制

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

假设’A’和’B’是两个迭代器:

A==B;           // valid
A<=B;           // invalid
  • 算术运算符 :算术运算符不能与双向迭代器一起使用,因为它以顺序访问数据。
A+2;              // invalid
A+1;              // invalid
  • 偏移引用运算符 :双向迭代器不支持偏移引用运算符或下标运算符[]用于随机访问元素。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程