How many types of iterators are there in C++ STL? As of now, I know of these:
- Output Iterator
- Input Iterator
- Forward Iterator
- Random Access Iterator
Are there more? What are the differences between them? What are the limitations and characteristics of each? Which type is used when?
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