What's the difference between input iterators and read-only forward iterators?

可紊 提交于 2019-11-29 06:06:32

Yes, input iterators are one-pass iterators. You can only iterate over them once, while forward iterators are multi-pass.

From §24.2.3 [input.iterators] p2 (the table), pre-/postcondition column of ++r:

pre: r is dereferenceable.
post: r is dereferenceable or r is past-the-end.
post: any copies of the previous value of r are no longer required either to be dereferenceable or to be in the domain of ==.

The last postcondition implies that for a == b, ++a == ++b is not required to be true.
Same clause, paragraph 3:

[ Note: For input iterators, a == b does not imply ++a == ++b. (Equality does not guarantee the substitution property or referential transparency.) Algorithms on input iterators should never attempt to pass through the same iterator twice. They should be single pass algorithms. [...] These algorithms can be used with istreams as the source of the input data through the istream_iterator class template. —end note ]

From §24.2.5 [forward.iterators]

p1 A class or pointer type X satisfies the requirements of a forward iterator if

  • [...]
  • objects of type X offer the multi-pass guarantee, described below.

p3 Two dereferenceable iterators a and b of type X offer the multi-pass guarantee if:

  • a == b implies ++a == ++b and
  • X is a pointer type or the expression (void)++X(a), *a is equivalent to the expression *a.
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!