输入迭代器
Coddy C++ 标准模板库 课程的第 14 课,共 23 课。
输入迭代器是一种用于读取容器中值的迭代器。输入迭代器的功能有限,因此是所有迭代器中“最弱”的。不过,这也让输入迭代器简单易懂。
它们主要用于顺序输入操作,在这类操作中,迭代器只会指向每个值一次,然后递增迭代器,通常使用 ++ 运算符将迭代器递增 1。

如你所见,前向迭代器、双向迭代器和随机访问迭代器都属于有效的输入迭代器。
接下来,我们来了解输入迭代器的特性。
- 相等/不等运算符
输入迭代器可以使用相等或不等运算符进行比较。只有当两个迭代器都指向同一位置时,它们才相等。
A == B // 相等
A != B // 不相等来看一个示例,检查两个迭代器是否指向同一位置。
vector<int> numbers = {1, 2, 3, 4, 5};
vector<int>::iterator it1, it2;
it1 = numbers.begin();
it2 = numbers.begin() + 1;
if(it1 == it2)
cout << "Both iterators are equal.";
else
cout << "Both iterators are not equal.";Output:
Both iterators are not equal.在上面的示例中,我们使用 vector<int>::iterator 声明了名为 it1 和 it2 的迭代器。然后为它们赋值。通过 begin() 方法,迭代器 it1 指向第一个元素的位置。迭代器 it2 指向第二个元素的位置,因为我们将 begin() 方法返回的值递增了 1。因此,程序的输出表明这两个迭代器并不相同。
- 解引用
输入迭代器可以解引用,解引用时使用*运算符。如果输出迭代器解引用后的值,就能得到迭代器所指向元素的实际值。
*A // 用 * 解引用vector<int> numbers = {1, 2, 3, 4, 5};
vector<int>::iterator it1, it2;
it1 = numbers.begin();
it2 = numbers.begin() + 1;
cout << *it1 << endl;
cout << *it2;Output:
1
2上面的示例与第一个示例的情况完全相同。迭代器 it1 指向数组中的第一个元素,迭代器 it2 指向数组中的第二个元素。输出迭代器解引用后的值时,我们会得到数组中第一个和第二个元素的实际值。
所以,如果我们想输出迭代器所指向的变量或元素的值,就使用 * 运算符。
- 可递增
输入迭代器可以递增,递增后会指向序列中的下一个元素。为此,我们使用++运算符。
A++ // 后置自增运算符
++A // 前置自增运算符vector<int> numbers = {1, 2, 3, 4, 5};
vector<int>::iterator it1;
it = numbers.begin();
cout << "First value is: " << *it << " ";
it++;
cout << "Second value is: " << *it << " ";
++it;
cout << "Third value is: " << *it;Output:
1 2 3在上面的示例中,我们声明了一个迭代器 it,让它指向数组中的第一个元素。我们输出数组中的第一个元素,然后将迭代器递增 1,使它指向第二个元素,以此类推。
- 可交换
指向不同位置的两个迭代器可以互换。我们可以像下面这样使用临时变量来交换它们。
vector<int> numbers = {1, 2, 3, 4, 5};
vector<int>::iterator it1, it2, temp;
it1 = numbers.begin();
it2 = numbers.begin() + 1;
cout << *it1 << " " << *it2 << endl;
temp = it1;
it1 = it2;
it2 = temp;
cout << *it1 << " " << *it2 << endl;Output:
1 2
2 1在上面的示例中,我们声明了两个迭代器,并将第一个元素的位置赋给第一个迭代器,将第二个元素的位置赋给第二个迭代器。我们输出这两个元素,然后交换两个迭代器的值。这样,第一个迭代器就指向第二个元素,第二个迭代器则指向第一个元素,正如输出所示。
挑战
中等从输入中给定 5 个数字,使用向量存储这些值。之后,使用 begin() 方法和迭代器遍历向量,并在每次循环迭代时递增迭代器。
Input
10
20
30
40
50Output
10 20 30 40 50亲手试试
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> numbers;
vector<int>::iterator it;
// Enter your code here
for(it = ; it != numbers.end(); )
{
}
return 0;
}C++ 标准模板库中的所有课
自己练习: C++ 在线编译器