【发布时间】:2013-09-09 12:23:17
【问题描述】:
C++ InputIterator 是迭代器概念中最有限的类型之一。只保证支持解引用、相等比较、前自增和后自增(以及后自增和解引用)
因为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 产生的任何类型都实现了合理的相等比较语义)
【问题讨论】: