|
Программирование >> Операторы преобразования типа
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 О ( команды
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |