Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Iterator Categories and Traversal | Introduction
C++ STL Containers and Algorithms

bookIterator Categories and Traversal

Iterators are a fundamental part of the C++ Standard Template Library (STL), providing a consistent way to access and traverse the elements of a container. The STL defines several iterator categories, each with different capabilities:

  • Input Iterators: allow reading elements in a single-pass, forward-only manner;
  • Output Iterators: allow writing elements in a single-pass, forward-only manner;
  • Forward Iterators: support both reading and writing, and can be used for multiple passes in the forward direction;
  • Bidirectional Iterators: extend forward iterators by also supporting backward traversal;
  • Random Access Iterators: provide all the capabilities of bidirectional iterators, plus direct access to any element in constant time using arithmetic operations.

Each STL container provides iterators of a specific category, depending on its internal structure. Understanding these categories helps you choose the right algorithms and traversal techniques for each container.

main.cpp

main.cpp

copy
123456789101112131415161718192021222324252627282930313233
#include <iostream> #include <vector> #include <list> int main() { std::vector<int> v = {1, 2, 3, 4, 5}; std::list<int> l = {10, 20, 30, 40, 50}; std::cout << "Traversing std::vector (random access iterator): "; for (auto it = v.begin(); it != v.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl; std::cout << "Traversing std::list (bidirectional iterator): "; for (auto it = l.begin(); it != l.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl; // Demonstrating random access (only valid for vector, not list) std::cout << "Accessing third element in vector using iterator arithmetic: "; auto v_it = v.begin(); v_it += 2; // advance by 2 positions std::cout << *v_it << std::endl; // Uncommenting the following lines would cause a compile error // because std::list iterators do not support random access // auto l_it = l.begin(); // l_it += 2; // std::cout << *l_it << std::endl; }

Iterator Operations and Supported Categories

Iterators provide several core operations that enable traversal and manipulation of container elements. The main operations are:

Understanding which operations are supported by each iterator category is essential for writing efficient and correct code. For example, you can use arithmetic operations with std::vector iterators, but not with std::list iterators. This distinction influences which algorithms and traversal patterns you can use with each container.

question mark

Which iterator supports arithmetic operations such as it + n to jump multiple positions?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 2

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Awesome!

Completion rate improved to 6.67

bookIterator Categories and Traversal

Stryg for at vise menuen

Iterators are a fundamental part of the C++ Standard Template Library (STL), providing a consistent way to access and traverse the elements of a container. The STL defines several iterator categories, each with different capabilities:

  • Input Iterators: allow reading elements in a single-pass, forward-only manner;
  • Output Iterators: allow writing elements in a single-pass, forward-only manner;
  • Forward Iterators: support both reading and writing, and can be used for multiple passes in the forward direction;
  • Bidirectional Iterators: extend forward iterators by also supporting backward traversal;
  • Random Access Iterators: provide all the capabilities of bidirectional iterators, plus direct access to any element in constant time using arithmetic operations.

Each STL container provides iterators of a specific category, depending on its internal structure. Understanding these categories helps you choose the right algorithms and traversal techniques for each container.

main.cpp

main.cpp

copy
123456789101112131415161718192021222324252627282930313233
#include <iostream> #include <vector> #include <list> int main() { std::vector<int> v = {1, 2, 3, 4, 5}; std::list<int> l = {10, 20, 30, 40, 50}; std::cout << "Traversing std::vector (random access iterator): "; for (auto it = v.begin(); it != v.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl; std::cout << "Traversing std::list (bidirectional iterator): "; for (auto it = l.begin(); it != l.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl; // Demonstrating random access (only valid for vector, not list) std::cout << "Accessing third element in vector using iterator arithmetic: "; auto v_it = v.begin(); v_it += 2; // advance by 2 positions std::cout << *v_it << std::endl; // Uncommenting the following lines would cause a compile error // because std::list iterators do not support random access // auto l_it = l.begin(); // l_it += 2; // std::cout << *l_it << std::endl; }

Iterator Operations and Supported Categories

Iterators provide several core operations that enable traversal and manipulation of container elements. The main operations are:

Understanding which operations are supported by each iterator category is essential for writing efficient and correct code. For example, you can use arithmetic operations with std::vector iterators, but not with std::list iterators. This distinction influences which algorithms and traversal patterns you can use with each container.

question mark

Which iterator supports arithmetic operations such as it + n to jump multiple positions?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 2
some-alt