C++双向迭代器基础教程文档
收录于 2023-04-20 00:10:05 · بالعربية · English · Español · हिंदीName · 日本語 · Русский язык · 中文繁體
双向迭代器支持正向迭代器的所有功能,并且还支持两个减量运算符(前缀和后缀)。 双向迭代器是用于在两个方向(即,朝向末端并朝向开始)访问元素的迭代器。 随机访问迭代器也是有效的双向迭代器。 许多容器实现双向迭代器,例如列表,集合,多集,地图,多图。 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'是迭代器类型的对象。
让我们看一个简单的示例:
#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
双向迭代器的功能
等式/不等式运算符: 可以使用等式或不等式运算符比较双向迭代器。仅当两个迭代器都指向相同位置时,这两个迭代器才相等。 假设" A"和" B"是两个迭代器:
A==B; A!=B;
假设" A"是迭代器," t"是整数变量:
*A = t; t = *A
A++; ++A;
A--; --A;
双向迭代器的局限性:
关系运算符: 相等或不相等运算符可以与双向迭代器一起使用,但是其他迭代器不能应用于双向迭代器。假设" A"和" B"是两个迭代器:
A==B; // valid A<=B; // invalid
A+2; // invalid A+1; // invalid