C++ iterators are classified in a number of different dimensions - not always completely orthogonal
Despite being heavily classified, the iterator types are not organized in a class hierarchy