C++教程-C++前向迭代器
C++ 前向迭代器
- 前向迭代器(Forward Iterator)是双向迭代器和随机访问迭代器的组合。因此,我们可以说前向迭代器可以用于读取和写入容器。
- 前向迭代器用于从容器的开始到结束读取内容。
- 前向迭代器只使用递增运算符(++)在容器的所有元素之间移动。因此,我们可以说前向迭代器只能向前移动。
- 前向迭代器是一个多遍迭代器,即可以多次遍历容器。
前向迭代器的操作
属性 | 有效表达式 |
---|---|
可以默认构造。 | A x; |
可以进行复制构造。 | A x(y); |
可以进行复制赋值。 | y = x; |
可以使用相等或不等运算符进行比较。 | a==b; a!=b; |
可以递增。 | a++; ++a; |
可以解引用作为rvalue。 | *a; |
可以解引用作为lvalue。 | *a = t; |
其中'A'是前向迭代器类型,x和y是前向迭代器类型的对象,t是迭代器类型对象指向的对象。
让我们看一个简单的例子:
#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
template<class ForwardIterator> // 函数模板
void display(ForwardIterator first, ForwardIterator last) // display函数
{
while (first != last)
{
cout << *first << " ";
first++;
}
}
int main()
{
vector<int> a; // 声明vector
for (int i = 1; i <= 10; i++)
{
a.push_back(i);
}
display(a.begin(), a.end()); // 调用display()函数
return 0;
}
输出:
1 2 3 4 5 6 7 8 9 10
前向迭代器的特性
- 相等/不相等运算符:前向迭代器可以通过使用相等或不等运算符进行比较。
假设'A'和'B'是两个迭代器:
A==B; // 相等运算符
A!=B; // 不相等运算符
- 解引用:我们可以将前向迭代器解引用为rvalue和lvalue。因此,我们可以访问前向迭代器的输出并且可以将值赋给前向迭代器。
假设'A'是迭代器,'t'是整数变量:
*A = t;
t = *A;
- 递增:前向迭代器可以递增,但不能递减。
假设'A'是迭代器:
A++;
++A;
前向迭代器的限制
- 递减:前向迭代器不能递减,因为它只能向前移动。
假设'A'是迭代器:
A--; // 无效
- 关系运算符:前向迭代器可以使用相等运算符,但不能对其他关系运算符进行操作。
假设'A'和'B'是两个迭代器:
A==B; // 有效
A>=B; // 无效
- 算术运算符:前向迭代器不能使用算术运算符。
A+2; // 无效
A+3; // 无效
- 随机访问:前向迭代器不支持随机访问元素,它只能迭代容器的元素。