C++ 前向迭代器
- 前向迭代器 是双向迭代器和随机访问迭代器的结合。因此,我们可以说前向迭代器可以用于读取和写入容器。
- 前向迭代器 用于从容器的开始到结束读取内容。
- 前向迭代器 只使用递增运算符(++)来遍历容器的所有元素。因此,我们可以说前向迭代器只能向前移动。
- 前向迭代器是多次遍历迭代器。
前向迭代器上的操作
属性 | 有效表达式 |
---|---|
它可以默认构造。 | A x; |
它可以被拷贝构造。 | A x(y); |
它可以被赋值拷贝。 | y = x; |
它可以通过使用相等或不相等运算符进行比较。 | a==b; a!=b; |
它可以被递增。 | a++; ++a; |
它可以作为一个右值进行解引用。 | *a; |
它也可以作为一个左值进行解引用。 | *a = t; |
其中 ‘A’ 是前向迭代器类型,x 和 y 是前向迭代器类型的对象,t 是由迭代器类型对象指向的对象。
让我们来看一个简单的示例:
#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
using namespace std;
template<class ForwardIterator> // function template
void display(ForwardIterator first, ForwardIterator last) // display function
{
while(first!=last)
{
cout<<*first<<" ";
first++;
}
}
int main()
{
vector<int> a; // declaration of vector.
for(int i=1;i<=10;i++)
{
a.push_back(i);
}
display(a.begin(),a.end()); // calling display() function.
return 0;
}
输出:
1 2 3 4 5 6 7 8 9 10
前向迭代器的特点
- 等号/不等号运算符 :可以使用等号或不等号运算符来比较前向迭代器。
假设’A’和’B’是两个迭代器:
A==B; // equality operator
A!=B; // inequality operator
- 解引用 :我们可以对前向迭代器进行解引用,既可以作为右值使用,也可以作为左值使用。因此,我们可以访问输出迭代器,并且还可以将值赋给输出迭代器
假设 ‘A’ 是一个迭代器,’t’ 是一个整数变量:
*A = t;
t = *A;
- 可递增 : 前向迭代器可以递增但不能递减。
假设 ‘A’ 是一个迭代器:
A++;
++A;
前向迭代器的限制
- 可递减: 前向迭代器无法递减,因为它只能向前移动。
假设 ‘A’ 是一个迭代器:
A--; // invalid
- 关系运算符: 正向迭代器可以与等号运算符一起使用,但不能在正向迭代器上使用其他关系运算符。
假设’A’和’B’是两个迭代器:
A==B; // valid
A>=B; // invalid
- 算术运算符 :算术运算符不能与正向迭代器一起使用。
A+2; // invalid
A+3; // invalid
- Random Access :前向迭代器不提供元素的随机访问。它只能遍历容器的元素。