Three requirements for an iterator:
- Can be compared for equality to another iterator. Equal when they point to the same position but otherwise are not equal.
- Can be dereferenced with the * operator to obtain the value being denoted by the iterator. Can be used as the target of an assignment in order to change the value being held by the container.
- Can be incremented so that it refers to the next element in sequence, using the operator ++.