Глава 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.
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