Last Updated: May 22, 2026
Not every iterator can do everything. A std::vector iterator can jump 100 positions forward in O(1). A std::list iterator only steps one position at a time. A std::istream_iterator can be incremented once per element and never reread. The STL formalises these differences into iterator categories, and almost every algorithm in the standard library is documented in terms of the minimum category its input iterators must satisfy. This chapter walks through the six categories, what each one supports, which containers provide which, why algorithms care, and how the old tag-based system was modernised by C++20 concepts.