C++ 双向迭代器


能够从两个方向(从开头和结尾)访问范围内的元素序列的迭代器称为双向迭代器。迭代器可以作用于列表、映射和集合等数据类型。

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

属性有效表达式
可默认构造、
可复制构造、
可复制赋值和可析构
X a;
X b(a);
b = a;
可以使用相等/不相等运算符比较是否相等(当两个迭代器值都遍历相同的底层序列时才有意义)。a == b
a != b
可以作为右值解引用(如果处于可解引用状态)。*a
a->m
对于可变迭代器(非常量迭代器):可以作为左值解引用(如果处于可解引用状态)。*a = t
可以递增(如果处于可解引用状态)。结果要么也是可解引用的,要么是超出末尾的迭代器。两个比较相等的迭代器在都递增后仍然保持相等。++a
a++
*a++
可以递减(如果存在一个可解引用的迭代器值在其之前)。--a
a--
*a--
左值可以交换。swap(a,b)

其中 X 是一个双向迭代器,a 和 b 是此迭代器类型的对象,t 是迭代器类型指向的类型(或其他可以赋值给解引用 X 类型对象返回的左值)的对象。

C++ 中双向迭代器的概念。

  • 双向迭代器支持前向迭代器的所有功能,以及前缀和后缀递减运算符。

  • 这种类型的迭代器可以双向访问元素,例如向后和向前。

  • 随机访问迭代器也是一种双向迭代器。

  • 双向迭代器具有前向迭代器的特性,但唯一的区别是此迭代器还可以递减。

Input: 1 2 3 4 5 6 7 8 9 10
Output: 10 9 8 7 6 5 4 3 2 1

示例

#include <iostream>
#include<iterator>
#include<vector>
using namespace std;
int main() {
   vector<int> vec{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
   vector<int> ::iterator it;
   vector<int> :: reverse_iterator rev_it;
   for(it = vec.begin(); it != vec.end(); it++)
      cout<<*it<<" ";
      cout<< endl;
   for(rev_it = vec.rbegin(); rev_it!= vec.rend(); rev_it++)
      cout<<*rev_it<<" ";
}

输出

1 2 3 4 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1

更新于: 2019-08-19

215 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.