本文概述
- 双向迭代器的性质
- 双向迭代器的功能
- 双向迭代器的局限性
- 双向迭代器支持正向迭代器的所有功能, 并且还支持两个减量运算符(前缀和后缀)。
- 双向迭代器是用于在两个方向(即朝向末端和朝向起点)访问元素的迭代器。
- 随机访问迭代器也是有效的双向迭代器。
- 许多容器都实现了双向迭代器, 例如列表, 集合, 多集, 映射, 多图。
- C ++提供了两个在两个方向上都移动的非常量迭代器:迭代器和反向迭代器。
- C ++双向迭代器具有与正向迭代器相同的功能, 唯一的区别是双向迭代器也可以递减。
属性 | 表达方式 |
---|---|
双向迭代器是默认可构造, 可复制分配和可破坏的。 | A x; A y(x); y = x; |
可以使用相等或不相等运算符进行比较。 | x == y x!= y |
可以取消引用, 这意味着我们可以使用取消引用运算符(*)检索值。 | *x |
可变迭代器可以作为左值取消引用。 | * x = t |
双向迭代器可以递增。 | x ++ ++ x |
双向迭代器也可以递减。 | x— x |
【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
双向迭代器的功能
文章图片
- 相等/不相等运算符:可以使用相等或不相等运算符比较双向迭代器。仅当两个迭代器都指向相同位置时, 两个迭代器才相等。
A==B;
A!=B;
- 取消引用:双向迭代器也可以同时作为左值和右值被解引用。
*A = t;
t = *A
- 可增量的:双向迭代器可以通过使用operator ++()函数来增量。
A++;
++A;
- 可减少的:双向迭代器也可以通过使用Operator-()函数来减少。
A--;
--A;
双向迭代器的局限性
- 关系运算符:相等或不相等运算符可以与双向迭代器一起使用, 但是其他迭代器不能应用于双向迭代器。
A==B;
// valid
A<
=B;
// invalid
- 算术运算符:算术运算符不能与双向迭代器一起使用, 因为它顺序访问数据。
A+2;
// invalid
A+1;
// invalid
- 偏移解引用运算符:双向迭代器不支持元素的随机访问的偏移解引用运算符或下标运算符[]。
推荐阅读
- C++前向迭代器用法
- C++中的阿姆斯特朗数
- 生成斐波那契三角形的C++程序
- C++使用递归
- C++程序打印数字三角形
- C++程序打印字母三角形
- C++ map映射函数用法
- C++列表list用法
- C++ do-while循环语句