Стандартные итераторы
В STL входит набор заранее определенных итераторов. В частности, мы уже встречались с объектами reverse_iterator, которые создаются функциями rbegin() и rend() всех основных контейнерных классов.
Итераторы вставки необходимы из-за того, что некоторые алгоритмы STL (например, сору()) заносят объекты в приемный контейнер оператором присваивания =. Проблемы возникают, если алгоритм используется для заполнения контейнера (вместо замены объектов, уже присутствующих в контейнере), то есть когда память для элементов еще не выделена. Итераторы вставки изменяют реализацию оператора = так, чтобы вместо присваивания вызывалась функция push или insert соответствующего контейнера. Тем самым обеспечивается выделение памяти для новых элементов.
Конструкторы basic_insert_iterator и front_insert_iterator получают при вызове объект одного из базовых классов последовательных контейнеров (vector, deque или list) и создают итератор, который для присваивания вызывает соответственно функции push_back() или push_front(). Вспомогательные функции back_inserter() и front_inserter() создают те же объекты итераторов вставки с конца и с начала контейнера, но вводятся быстрее. Поскольку функция push_back() поддерживается всеми базовыми последовательными контейнерами, вероятно, вы будете довольно часто использовать в своей работе функцию back_inserter().
Итератор insert_iterator вставляет элементы в середину последовательности. Он тоже переопределяет смысл оператора =, но вместо функций категории push он автоматически вызывает функцию insert(). При вызове этой функции класса должен передаваться итератор, установленный в позицию перед позицией вставки, поэтому у объекта insert_iterator должны быть два аргумента: контейнер и итератор. Вспомогательная функция inserter() создает этот же объект.
![]()
Посетите государственный историко-архитектурный музей-заповедник, один из крупнейших музеев Ярославля. Для вашего удобства посещения этого города в нём работают гостиницы Ярославля, которые продолжат ваши путешествия.
