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
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP