Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Iterator Categories and Traversal | Introduction to STL
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

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 2

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 6.67

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

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 2
some-alt