12 c++ iterator c++-standard-library
输入迭代器和只读前向迭代器之间有什么区别?
因为后者是只读的,所以它们显然不满足输出迭代器的要求.而且,正因为如此,它们才能有效地输入迭代器并提供额外的保证(如果有的话).问题是,有什么额外的保证?
我的猜测是前向迭代器是多次传递而输入迭代器不是,我是对的吗?
Xeo*_*Xeo 21
是的,输入迭代器是一次通过迭代器.你只能迭代它们一次,而前向迭代器是多遍的.
来自§24.2.3 [input.iterators] p2 (the table),前/后条件列++r:
pre:
r是可解除引用的.
post:r是可解除引用的,或者r是过去的结尾.
post:r不再要求任何前一个值的副本可以解除引用或属于==.
最后一个后置条件意味着对a == b,++a == ++b是不是需要true.
同一条,第3款:
[ 注意:对于输入迭代器,a == b并不意味着++ a == ++ b.(Equality不保证替换属性或引用透明性.)输入迭代器上的算法绝不应该尝试两次通过相同的迭代器.它们应该是单通道算法.[...]这些算法可以通过
istream_iterator类模板与istreams一起用作输入数据的来源.- 尾注 ]
从 §24.2.5 [forward.iterators]
p1类或指针类型
X满足前向迭代器的要求
- [...]
- 类型的对象
X提供多次通过保证,如下所述.p3如果出现以下情况,则两个可解除引用的迭代器a和b
X提供多次通过保证:
a == b暗示++a == ++b和X是指针类型或表达式(void)++X(a), *a等价于表达式*a.