A Collection is a concept similar to the STL Container concept.
A Collection provides iterators for accessing a range of
elements and provides information about the number of elements
in the Collection. However, a Collection has fewer requirements
than a Container. The motivation for the Collection concept is
that there are many useful Container-like types that do not meet
the full requirements of Container, and many algorithms that can
be written with this reduced set of requirements. To summarize
the reduction in requirements: |Value type||X::value_type||The
type of the object stored in a Collection. If the Collection is
mutable then the value type must be Assignable. Otherwise the
value type must be CopyConstructible.| |Iterator
type||X::iterator||The type of iterator used to iterate through
a Collection's elements. The iterator's value type is expected
to be the Collection's value type. A conversion from the
iterator type to the const iterator type must exist. The
iterator type must be an InputIterator.|