C++ InputIterator是Iterator Concept的最有限类型之一。仅保证支持取消引用,相等比较,增加前和增加后(以及增加后和取消引用)

由于InputIterator对象经常在任意流上进行迭代,因此您甚至无法确保在同一输入上进行两次迭代会产生相同的值。

不过,我很困惑,如果保证取消引用运算符operator *每次在您取消引用它时都返回相同的值,前提是您绝不增加迭代器。

例如,假设std::begin(some_input_stream)返回满足InputIterator概念要求的对象,并且it不等于或超过结束位置:

auto it = std::begin(some_input_stream);
auto value1 = *it;
auto value2 = *it;
assert(value1 == value2);

是否保证value1value2的值相同? (当然,提供*it类型的任何类型都实现了理智的相等比较语义)

最佳答案



是的。实际上,您还可以复制迭代器,并确保在增加一个迭代器之一之前,该拷贝将产生相同的结果:

auto it2 = it;
auto value3 = *it2;
assert(value3 == value1);

++it2;
auto value4 = *it; // ERROR: might not be dereferencable any more

这由C++ 11表107中*a的要求(输入迭代器要求)指定:



并且,在++r之后:

关于c++ - 对InputIterator语义/概念要求的困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18698140/

10-12 02:09