Menu
CoddyTech

输入迭代器

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

在上面的示例中,我们声明了两个迭代器,并将第一个元素的位置赋给第一个迭代器,将第二个元素的位置赋给第二个迭代器。我们输出这两个元素,然后交换两个迭代器的值。这样,第一个迭代器就指向第二个元素,第二个迭代器则指向第一个元素,正如输出所示。

challenge icon

挑战

中等

从输入中给定 5 个数字,使用向量存储这些值。之后,使用 begin() 方法和迭代器遍历向量,并在每次循环迭代时递增迭代器。

 

Input
10
20
30
40
50
Output
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++ 在线编译器