Standard C++ Library Class Reference
For input iterators, a == b does not imply that ++a == ++b.
Algorithms using input iterators should be single pass algorithms. That is they should not pass
through the same iterator twice.
The value of type T does not have to be an lvalue.
Requirements for Output Iterators
The following expressions must be valid for output iterators:
X(a) copy constructor, a == X(a)
X u(a) copy constructor, u == a
X u = a assignment, u == a
*a = t result is not used
++r returns X&
r++ return value convertable to const X&
*r++ = t result is not used
The only valid use for the operator* is on the left hand side of the assignment statement.
Algorithms using output iterators should be single pass algorithms. That is they should not pass
through the same iterator twice.
Requirements for Forward Iterators
The following expressions must be valid for forward iterators:
X u u might have a singular value
X() X() might be singular
X(a) copy constructor, a == X(a)
X u(a) copy constructor, u == a
X u = a assignment, u == a
a == b, a != b return value convertible to bool
*a return value convertible to T&
a->m equivalent to (*a).m
++r returns X&
r++ return value convertable to const X&
*r++ returns T&