Глава 18. Классы-контейнеры

469

insert_iterator. При этом перелаются два параметра-шаблона: типа container И типа iterator. K-ОНСТруктор И функция insert_iterator () также получают два параметра: контейнер и итератор.

И, наконец, итератор raw_storage_iterator - это итератор вывода, который позволяет алгоритмам STL хранить результаты в не инициализированной области памяти. Таким образом алгоритмы STL, например функция copy, для хранения результатов могут использовать блоки памяти, размещенные с помощью операции new или mailoc.

Объекты-функции

Многие алгоритмы STL для своей работы нуждаются в определенных пользователем функциях. Функция-член ForEach контейнера BIDS в качестве параметра использует указатель на функцию (функтор). 'В STL существует аналогичный алгоритм, называемый for each. Определяется он следующим образом:

template <class Inputlterator, class Fur;ction> • Function for each(Inputlterator first, Inputlterator last. Function f);

Алгоритм for each применяет функцию f ко всем элементам между first (включая его) и last (исключая его), f может быть указателем на функцию или одним из экземпляров класса, который определяет операция о. Листинг 18.19 иллюстрирует оба варианта, в том числе с использованием алгоритма for_each.

h04691.jpg

jtdefine RWSTD_NO_NM-1ESPACE #include <cstring.h> ttinclude <iostream.h> ftinclude <algorith.h> ^include <vector.h>

// Указатель на функцию. void WriteStr(string &s) {

cout « s « " ";

// Класс, используемый как объект-функция.

// Работает только со строковыми элементами.

class WRITE_STR

(

public:

void operator()(string &s) { cout « s « " "; i