Types of iterator : Output vs. Input vs. Forward vs. Random Access Iterator
If you can, find and read "The C++ Standard Library: A Tutorial and Reference". This book contains a whole chapter about STL iterators.
Here is a little something from the book:
Iterator Category Ability Providers
----------------- ------------------------------- ----------------------------
Input iterator Reads forward istream
Output iterator Writes forward ostream, inserter
Forward iterator Reads/writes forward forward_list,
unordered_[multi]set,
unordered_[multi]map
Bidirectional it. Reads/writes forward/backward list, [multi]set, [multi]map
Random access it. Reads/writes with random access vector, deque string, array
The C++ standard also has a Bidirectional Iterator concept, which is a Forward Iterator that can also go backward (with operator--
). Together, these five form the entire iterator hierarchy in paragraph 24.2 of the C++ standard.
The old STL also had the concept of a Trivial Iterator. See its Iterator overview for details regarding the various iterators.
Boost designers Abrahams, Siek and Witt have presented a much more fine-grained set of iterator concepts.
I suspect you know the answer pretty well, but anyway, these charts are very helpful in sorting this out