A class that is used to traverse through the objects maintained by a container class.
There are five categories of iterators: input iterators, output iterators, forward
iterators, bidirectional iterators, random access. An iterator is an entity that
gives access to the contents of a container object without violating encapsulation
constraints. Access to the contents is granted on a one-at-a-time basis in order.
The order can be storage order (as in lists and queues) or some arbitrary order
(as in array indices) or according to some ordering relation (as in an ordered binary
tree). The iterator is a construct, which provides an interface that, when called,
yields either the next element in the container, or some value denoting the fact
that there are no more elements to examine. Iterators hide the details of access
to and update of the elements of a container class.
The simplest and safest iterators are those that permit read-only access to the
contents of a container class.