The iterator type must be a model of .

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).

The value type of the iterator

The category of the iterator

i
is incrementable (not off-the-end)
i
is incrementable (not off-the-end)
i
is incrementable (not off-the-end)
i
is incrementable (not off-the-end)
Equivalent to `{Iter j = i; ++i; return j;}`
i
is dereferenceable or off-the-end
All iterator operations must take amortized constant time.
&i = &(++i)
i == j
implies `++i == ++j`