CONCEPT FORWARDIT(7)

NAME
ForwardIterator

DESCRIPTION

A forward iterator is an iterator that can read through a sequence of values. It is multi-pass (old values of the iterator can be re-used), and can be either mutable (data pointed to by it can be changed) or not mutable.

An iterator represents a position in a sequence. Therefore, the iterator can point into the sequence (returning a value when dereferenced and being incrementable), or be off-the-end (and not dereferenceable or incrementable).

REFINEMENT OF

    &#8226; InputIterator

    &#8226; OutputIterator

ASSOCIATED TYPES

    &#8226; value_type

    std::iterator_traits<Iter>::value_type
    The value type of the iterator

    &#8226; category

    std::iterator_traits<Iter>::iterator_category
    The category of the iterator

NOTATION

Iter
    A type playing the role of iterator-type in the ForwardIterator concept.

i, j
    Objects of type Iter

x
    Object of type value_type

TYPE EXPRESSIONS

Category tag
    category must be derived from std::forward_iterator_tag.

VALID EXPRESSIONS
Name | Expression | Type | Precondition | Semantics | Postcondition
Dereference | *i | const-if-not-mutable value_type & | i is incrementable (not off-the-end) |  |
Member access | i->{member-name} (return type is pointer-to-object type) | const-if-not-mutable value_type * | i is incrementable (not off-the-end) |  |
Preincrement | ++i | Iter & | i is incrementable (not off-the-end) |  |
Postincrement | i++ | Iter | i is incrementable (not off-the-end) | Equivalent to {Iter j = i; ++i; return j;} | i is dereferenceable or off-the-end

COMPLEXITY

All iterator operations must take amortized constant time.

INVARIANTS

Predecrement must return object
    &i = &(++i)

Unique path through sequence
    i == j implies ++i == ++j

MODELS

    &#8226; T *

    &#8226; std::hash_set<T>::iterator

SEE ALSO

    &#8226; BidirectionalIterator