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