|
Программирование >> Операторы преобразования типа
1ter++; *iter = 2: 1ter++; *iter - 3; PRINTJLEMENTS(coll): Создание конечного итератора вставки и вставка элементов - удобный способ back 1nserter(coll) = 44; back 1nserter(coll) = 55; PRINT ELEMENTS(coll): Присоединение всех элементов контейнера с использованием конечного итератора вставки - резервирование памяти для предотвращения ее перераспределения coll .reserve(2*coll .sizeO); copy (coll-beginO . coll.endO. Источник back lnserter(coll)); Приемник PRINT ELEMENTS(coll); Результат выполнения программы выглядит так: 1 2 3 1 2 3 44 55 1 2 3 44 55 1 2 3 44 55 Не забудьте зарезервировать достаточный объем памяти перед вызовом сору(). В противном случае добавление новых элементов конечным итератором вставки может привести к тому, что все остальные итераторы, относящиеся к вектору, станут недействительными. Другими словами, если не зарезервировать достаточно памяти, во время работы алгоритм может испортить переданные ему итераторы источника. Строки также поддерживают интерфейс контейнеров STL, включая функцию push back(). Соответственно конечные итераторы вставки могут использоваться для присоединения символов к строке. Пример приведен на с. 484. Начальные итераторы вставки Начальный итератор вставки вставляет новое значение в начало контейнера вызовом функции push front() (см. с. 247). Функция push lTOnt() определена только для деков и списков, поэтому начальные итераторы вставки поддерживаются только этими контейнерами стандартной библиотеки С-ь+. Начальный итератор вставки должен инициализироваться контейнером в момент создания. Для этого удобнее всего воспользоваться функцией front.inserter(). Ниже приведен пример использования начального итератора вставки. iter/frontins.cpp #1nclude <iostream> #lnclude <l1st> #lnclude <algorithm> #include print.hpp using namespace std: int mainC) { list<int> coll: Создание начального итератора вставки для coll - неудобный способ front insert iterator<list<int> > iter(coll); Вставка элементов через обычный интерфейс итераторов *iter - 1 iter++; *iter - 2 iter++: *iter - 3 PRINTJLEMENTSCcoll): Создание начального итератора вставки и вставка элементов - удобный способ front inserter(coll) = 44; front inserterCcol1) 55: PRINTJLEMENTS(coll): Вставка всех элементов контейнера с использованием начального итератора вставки сору Ccoll.beglnO. coll.endO, Источник front 1nserter(coll)): Приемник PRINT ELEMENTSCcoll): Результат выполнения программы выглядит так: 3 2 1 55 44 3 2 1 1 2 3 44 55 55 44 3 2 1 Обратите внимание: начальный итератор вставки добавляет элементы в обратном порядке. Это происходит из-за того, что следующий элемент всегда вставляется перед предыдущим. Общие итераторы вставки Общий итератор вставки инициализируется двумя значениями: контейнером и позицией вставки элементов. На основании этой информации вызывается функция insertO, которой заданная позиция передается в качестве аргумента. Функция inserterO обеспечивает удобный способ создания и инициализации общего итератора вставки. Общие итераторы вставки поддерживаются всеми стандартными контейнерами, потому что необходимая функция insert() определена во всех контейнерах. Тем не менее в ассоциативных контейнерах (множествах и отображениях) передаваемая позиция имеет рекомендательный, а не обязательный характер, поскольку правильная позиция элемента определяется его значением. За подробностями обращайтесь к опнса1П1Ю функции insert() иа с. 245. После вставки общий итератор вставки переходит в позицию вставленного элемента. Выполняются следующие команды: pos = контейнер, insertipos.value): ++POS; Присваивание итератору возвращаемого значения функции insert() гарантирует, что позиция итератора всегда остается действительной. Без присваивания новой позиции в деках, векторах и строках общий итератор вставки сам делал бы себя недействительным, поскольку каждая операция вставки, по крайней мере теоретически, может сделать недействительными все итераторы, ссылающиеся на контейнер. Пример использования o6uiero итератора вставки: 1ter/1nserter,cpp #1nclude <iostrearTt> #include <set> #include <list> #include <algor1thri> #include print.hpp using namespace std: 1nt mainO ( set<int> coll: Создание общего итератора вставки для coll - неудобный способ insert iterator<set<1nt> > 1ter(coll .coll .beginO): Вставка элементов через обычный интерфейс итераторов *iter = 1: 1ter++; *iter - 2: iter++: *1ter = 3: PRINT ELEMENTS(coll. set: ): Создание общего итератора вставки и вставка элементов - удобный способ 1nserter(coll .coll .endO) =44:
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |