The Iterator requirements form the basis of the iterator concept taxonomy; every iterator satisfies the Iterator requirements. This set of requirements specifies operations for dereferencing and incrementing an iterator. Most algorithms will require additional operations to read ([input.iterators]) or write ([output.iterators]) values, or to provide a richer set of iterator movements ([forward.iterators], [bidirectional.iterators], [random.access.iterators]).)
A type X satisfies the Iterator requirements if:
X satisfies the CopyConstructible, CopyAssignable, and Destructible requirements ([utility.arg.requirements]) and lvalues of type X are swappable ([swappable.requirements]), and
the expressions in Table [tab:iterator.requirements] are valid and have the indicated semantics.
Expression | Return type | Operational | Assertion/note |
semantics | pre-/post-condition | ||
*r | reference | pre: r is dereferenceable. | |
++r | X& |