What\'s the difference between input iterators and read-only forward iterators?
Because the latter are read-only, they obviously don\'t satisfy requirements of outpu
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:
ris dereferenceable.
post:ris dereferenceable orris past-the-end.
post: any copies of the previous value ofrare 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_iteratorclass template. —end note ]
From §24.2.5 [forward.iterators]
p1 A class or pointer type
Xsatisfies the requirements of a forward iterator if
- [...]
- objects of type
Xoffer the multi-pass guarantee, described below.p3 Two dereferenceable iterators a and b of type
Xoffer the multi-pass guarantee if:
a == bimplies++a == ++bandXis a pointer type or the expression(void)++X(a), *ais equivalent to the expression*a.