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