|
| |
|
| Category: iterators | | Component type: concept |
A Forward Iterator is an iterator that corresponds to the usual intuitive notion of a linear sequence of values. It is possible to use Forward Iterators (unlike
InputIterator and
OutputIterator) in multipass algorithms. Forward Iterators do not, however, allow stepping backwards through a sequence, but only, as the name suggests, forward.
A type that is a model of Forward Iterator may be either mutable or immutable, as defined in the trivial requirements.
InputIterator,
OutputIterator
The same as for
InputIterator
X | A type that is a model of Forward Iterator |
T | The value type of X |
i, j | Object of type X |
t | Object of type T |
Forward Iterator does not define any new expressions beyond those defined in
InputIterator. However, some of the restrictions described in
InputIterator are relaxed.
| Name | Expression | Type requirements | Return type |
| Preincrement | ++i | | X& |
| Postincrement | i++ | | X |
Forward Iterator does not define any new expressions beyond those defined in
InputIterator. However, some of the restrictions described in
InputIterator are relaxed.
| Name | Expression | Precondition | Semantics | Postcondition |
| Preincrement | ++i | i is dereferenceable | i points to the next value | i is dereferenceable or past-the-end. &i == &++i. If i == j, then ++i == ++j. [1] |
| Postincrement | i++ | i is dereferenceable | Equivalent to {X tmp = i; ++i; return tmp;} | i is dereferenceable or past-the-end. [1] |
The complexity of operations on Forward Iterators is guaranteed to be amortized constant time.
[1] The restrictions described in
InputIterator have been removed. Incrementing a forward iterator does not invalidate copies of the old value and it is guaranteed that, if
i and
j are dereferenceable and
i == j, then
++i == ++j. As a consequence of these two facts, it is possible to pass through the same Forward Iterator twice.
InputIterator,
OutputIterator,
BidirectionalIterator,
RandomAccessIterator,
Iterators