466_____________________Часть III. Современное программирование на C++
щая насколько это необходимо предыдущее содержимое. Существуют три итератора вставки:
• back_insert_ iterator (вставка В конец)
• front_in5ert_iterator (вставка в начало)
• insert_iterator (вставка)
Итератор back_insert_iterator добавляет новые элементы в конец контейнера. Он работает только с контейнерами типа список, д&усторонняя очередь или вектор. Параметром-шаблоном для этого класса является контейнер типа vector<string>. KoHCTpyKTOp ДЛЯ итератора back_insert_iterator
принимает объект-контейнер. Следующий фрагмент кода иллюстрирует создание итератора back_insert_iterator для вектора строк:
vector<string> stringVector;
back_insert_iterator<vector<string> > backlnserter(stringVector) ;
Наиболее обычное применение адаптеров вставки состоит в использовании их в функции copy. Специальные функции STL определены так, чтобы обеспечить простой способ создания итератора, который может понадобиться в качестве функции-параметра. Такими функциями являются:
back_inserter, front_inserter И inserter. Для использования функции back_inserter с функцией copy допустим следующий код:
copy(sourceContainer.begin(), sourceContainer.end(), back_inserter(targetContainer)) ;
Итератор front_insert_iterator вставляет новые элементы в начало контейнера и используется только с контейнерами двусторонняя очередь и список. Шаблоны и конструкторы для него такие же, как для итератора
back insert iterator.
Замечание
Когда объекты front_insert_iterator или функция front_inserter применяются для копирования элементов из одного контейнера в другой, изменяется порядок следования элементов в контейнере. Например в следующем фрагменте результирующая двусторонняя очередь содержит последовательность 3, 2, 1:
int intArray[3] = {1,2,3};
//Используется массив стандартного С как контейнер. deque<int> intDeque;
copy(intArray, intArray+3, front_inserter(deque));
//Используются указатели С для начальной и конечной вставки.
Итератор insert_iterator добавляет новые элементы в контейнер на место, которое определяется итератором, переданным в конструктор объекта insert_iterator. Только контейнеры-списки поддерживают итератор