我正在阅读C++ Standard(部分输入迭代器),而且我很难以粗体显示文字:
注意:对于输入迭代器,a == b并不意味着++ a == ++ b。 (平等并不保证替代 属性或参照透明度。)输入迭代器上的算法绝不应该尝试传递 通过相同的迭代器两次。它们应该是单通道算法。
我理解输入迭代器是单遍的,但我似乎无法在C ++代码中将其可视化。有人可以在示例中告诉我如何使迭代器成为单一传递吗?
答案 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
。