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. Только контейнеры-списки поддерживают итератор