РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
345 of 815 menu

Категория bidirectional_iterator

Категория bidirectional_iterator описывает двунаправленный итератор. Такой итератор умеет не только перемещаться вперед по последовательности, как forward_iterator, но и назад. Это достигается за счет поддержки оператора декремента --. Двунаправленные итераторы используются в таких контейнерах, как list, set, map и других. В отличие от random_access_iterator, двунаправленный итератор не поддерживает произвольный доступ и арифметику указателей.

Синтаксис

template <class It> concept bidirectional_iterator = /* ... */;

Категория задается через концепт std::bidirectional_iterator, который определен в заголовочном файле <iterator>.

Пример

Давайте создадим список и пройдемся по нему сначала вперед, а затем назад с помощью двунаправленного итератора:

#include <iostream> #include <list> using namespace std; int main() { list<int> lst = {1, 2, 3, 4, 5}; cout << "Forward: "; for (auto it = lst.begin(); it != lst.end(); ++it) { cout << *it << " "; } cout << endl; cout << "Backward: "; auto it = lst.end(); while (it != lst.begin()) { --it; cout << *it << " "; } cout << endl; return 0; }

Результат выполнения кода:

"Forward: 1 2 3 4 5" "Backward: 5 4 3 2 1"

Пример

Давайте проверим, что итератор списка удовлетворяет концепту bidirectional_iterator с помощью статической проверки:

#include <iostream> #include <list> #include <iterator> using namespace std; int main() { using It = list<int>::iterator; if constexpr (bidirectional_iterator<It>) { cout << "It is bidirectional" << endl; } else { cout << "It is not bidirectional" << endl; } It it = list<int>{1, 2, 3}.begin(); --it; cout << *it << endl; return 0; }

Результат выполнения кода:

"It is bidirectional" 3

Смотрите также

  • категория forward_iterator,
    которая позволяет двигаться только вперед
  • категория random_access_iterator,
    которая поддерживает произвольный доступ
  • функция prev,
    которая возвращает предыдущий итератор
  • функция next,
    которая возвращает следующий итератор
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить