The iterator type (with value type ) must be a model of . An output iterator is an iterator that can write a sequence of values. It is single-pass (old values of the iterator cannot be re-used), and write-only. An output iterator represents a position in a (possibly infinite) 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 stated value type of the iterator (should be void for an output iterator that does not model some other iterator concept). The difference type of the iterator The category of the iterator i is incrementable (not off-the-end) i is incrementable (not off-the-end) *i may not be written to again until it has been incremented. i is incrementable (not off-the-end) i is incrementable (not off-the-end) Equivalent to (void)(++i) i is dereferenceable or off-the-end i is incrementable (not off-the-end) Equivalent to {*i = t; ++i;} i is dereferenceable or off-the-end All iterator operations must take amortized constant time.