The iterator type must be a model of .

An input iterator is an iterator that can read through a sequence of values. It is single-pass (old values of the iterator cannot be re-used), and read-only.

An input 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 (not necessarily what `*i` returns)

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
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 `{value_type t = *i; ++i; return t;}`
i
is dereferenceable or off-the-end
All iterator operations must take amortized constant time.