Reputation: 361362
How many types of iterators are there in C++ STL? As of now, I know of these:
Are there more? What are the differences between them? What are the limitations and characteristics of each? Which type is used when?
Upvotes: 54
Views: 23046
Reputation: 3412
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
Upvotes: 49
Reputation: 14682
I suspect you know the answer pretty well, but anyway, these charts are very helpful in sorting this out
Upvotes: 8
Reputation: 363547
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.
Upvotes: 18