Forward iterators

X () Constructor on forward iterators
X (const X& a) Constructor on forward iterators
== Operator on forward iterators
!= Operator on forward iterators
* Operator on forward iterators
++ Operator on forward iterators

A class or a built-in type X satisfies the requirements of a forward iterator if the following expressions are valid:

Table 4: Forward iterator requirements

Expression Return type Operational semantics Assertion/note pre/post-condition
X u;     note: u might have a singular value.
note: a destructor is assumed.
X()     note: X() might be singular.
X(a)     a == X(a).
X u(a);
X u = a;
  X u; u = a; post: u == a.
a == b convertible to bool   == is an equivalence relation.
a != b convertible to bool !(a == b)
   
r = a X&   post: r == a.
*a convertible to T   pre: a is dereferenceable. a == b implies *a == *b.
If X is mutable, *a = t is valid.
++r X&   pre: r is dereferenceable.
post: r is dereferenceable or r is past-the-end.
r == s and r is dereferenceable implies ++r == ++s. &r == &++r.
r++ X
{ X tmp = r;
  ++r;
  return tmp; }

  

NOTE: The fact that r == s implies ++r == ++s (which is not true for input and output iterators) and the removal on the restrictions on the number of the assignments through the iterator (which applies to output iterators) allows the use of multi-pass one-directional algorithms with forward iterators.