C ++输入迭代器

时间:2016-02-06 22:17:57

标签: c++ iterator input-iterator

我正在阅读C++ Standard(部分输入迭代器),而且我很难以粗体显示文字:

  

注意:对于输入迭代器,a == b并不意味着++ a == ++ b。 (平等并不保证替代   属性或参照透明度。)输入迭代器上的算法绝不应该尝试传递   通过相同的迭代器两次。它们应该是单通道算法。

我理解输入迭代器是单遍的,但我似乎无法在C ++代码中将其可视化。有人可以在示例中告诉我如何使迭代器成为单一传递吗?

1 个答案:

答案 0 :(得分:2)

假设您要从标准输入中读取整数。一种方法是使用

#include <iterator>
#include <iostream>
#include <vector>

using namespace std;

const vector<int> v{istream_iterator<int>{cin}, istream_iterator<int>{}};

这会将整数读入v(请参阅istream_iterator)。

在这种情况下,迭代器将是单遍的很有意义,因为范围是刚刚创建的东西,当用户输入内容时,每个元素都被消耗和消失。你不能重申这个范围。

除此之外,不太清楚你的意思

  

如何使迭代器成为单一传递?

  • 如果您的意思是&#34;如何表示您正在编写的迭代器类具有此限制?&#34;,则将其iterator_category设置为input_iterator_tag < / p>

    struct my_iterator
    {
        using iterator_category = input_iterator_tag;
    };
    
  • 如果要查询(在编译时)迭代器类是否具有此限制,请使用iterator_traits