Программирование >>  Операторы преобразования типа 

1 ... 89 90 91 [ 92 ] 93 94 95 ... 239


Inline asso insert iterator<Conta1ner> assoinserter (Container& с)

{ ~

return asso 1nsert iterator<Container>Cc);

Класс assojnsertjterator является производным от класса iterator. Чтобы задать категорию итератора, в iterator передается первый аргумент шаблона output iterator tag. Итераторы вывода используются только Для записи, поэтому, как и ДЛЯ всех итераторов вывода, в качестве типов элеме1гга и разности указывается void.

В момент создания итератор сохраняет свой контейнер в переменной container. Все присваиваемые значения вставляются в контейнер функцией insertQ. Операторы * и ++ реализуют фиктивные операции, которые просто возвращают сам итератор. При использовании стандартного интерфейса итераторов следующее выражение возвращает *this:

*pos = value

Операция приспаиваиия преобразуется в вызов insert(value) для соответствующего контейнера.

Кроме Kiacca итератора вставки мы также определяем вспомогательную функцию asso inserter для создания и инициализации итератора. Следующая программа добавляет в множество несколько элементов, используя пользовательский итератор вставки:

iter/assoiter.cpp

Iinclude <i05trea[n> Iinclude <set> Iinclude <algorithm> using namespace std;

Iinclude print,hpp

Iinclude assoiter.hpp

int main() {

set<int> coll;

Создание итератора вставки для coll - неудобный способ

asso 1nsert 1terator<set<int> > Iter(coll);

Вставка элементов через обычный интерфейс итераторов

*1ter = 1;

iter++;

Б прежних версиях STL класс asso inscrt iterator объявляется производным от класса output iterator без параметров шаблона.



*1ter = 2: 1ter++: *iter = 3;

PRINT ELEMENTSCcoll):

Создание итератора вставки для coll и вставка злементов - удобный способ asso inserter(coll) = 44; asso inserter(coll) = 55;

PRiNTJLEMENTSCcoll):

Использование итератора вставки с алгоритмом 1nt vals[] = { 33, 67. -4. 13. 5. 2 }:

copy Cvals. vals+Csi2eof(vals}/si2eofCvals[0])). Источник asso inserter(coll)): Приемник

PRINT ELEMENTSCcoll);

Результат выполнения программы выглядит так:

1 2 3

1 2 3 44 55

-4 1 2 3 5 13 33 44 55 67




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

Эта глава посвящена объектам функций, или функторам, упоминавшимся на с. 134. Рассматриваются все стандартные объекты функций и функциональные адаптеры, объясняется концепция функционально!! композиции и принципы написания пользовательских объектов функций.

Концепция объектов функций

Объектом функции, или функтором, называется объект, для которого определен оператор (). Так, в следующем фрагменте выражение fo() означает не вызов функции fo(), а вызов оператора () объекта функции fo:

FunctionObjectType fo: fo(,..);

Ha первый взгляд кажется, что объект функции - это самая обычная функция, зачем-то записанная более сложным способом. В обычной функции все необходимые команды включаются в тело функции:

void fo() { команды

В случае объекта функции команды включаются в тело оператора () класса объекта функции:

class FunctionObjectType ( public: void OperatorO О ( команды



1 ... 89 90 91 [ 92 ] 93 94 95 ... 239

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика