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);
是否保证
value1
与value2
的值相同? (当然,提供*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/