Итераторы в C++ представляют собой обобщенные указатели, предоставляющие доступ к элементам контейнера и возможность их обхода. Согласно стандарту C++, различают 5 основных категорий итераторов, упорядоченных по возрастанию их возможностей:
- Input iterators (Входные итераторы):
- Позволяют только чтение элементов (
operator*() const).
- Позволяют инкрементировать итератор (
operator++()).
- Поддерживают сравнение на равенство (
operator==(), operator!=()).
- Пример: итераторы для потоков ввода (
std::istream_iterator).
- Output iterators (Выходные итераторы):
- Позволяют только запись элементов (
operator*()).
- Позволяют инкрементировать итератор (
operator++()).
- Пример: итераторы для потоков вывода (
std::ostream_iterator).
- Forward iterators (Однонаправленные итераторы):
- Поддерживают все возможности входных и выходных итераторов.
- Гарантируют, что инкрементирование итератора всегда ведет к следующему элементу или концу последовательности.
- Пример: итераторы для односвязных списков (
std::forward_list).
- Bidirectional iterators (Двунаправленные итераторы):
- Поддерживают все возможности однонаправленных итераторов.
- Позволяют декрементировать итератор (
operator--()) для перемещения к предыдущему элементу.
- Пример: итераторы для списков (
std::list) и множеств (std::set).
- Random access iterators (Итераторы произвольного доступа):
- Поддерживают все возможности двунаправленных итераторов.
- Позволяют выполнять арифметические операции с итераторами (сложение/вычитание целых чисел, вычитание итераторов) для быстрого перехода к любому элементу.
- Позволяют использовать оператор
[] для доступа к элементам по индексу.
- Пример: итераторы для векторов (
std::vector) и массивов (std::array).
Эта иерархия подразумевает, что каждая последующая категория итераторов обладает возможностями всех предыдущих. Например, итератор произвольного доступа также является двунаправленным, однонаправленным, входным и выходным.
c
Существуют также адаптеры итераторов (например, std::reverse_iterator, std::move_iterator), которые изменяют поведение базовых итераторов.