Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 [ 78 ] 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239

Вторая версия unique() работоспособна только в системах с поддержкой шаблонных функций классов (см. с, 28).

Вторая версия nierge()pa6oTociioco6Ha только н системах с поддержкой шаблонных функний классов (см, с, 28).

О Перед вызовом необходимо убедиться в том, что pos представляет действительную П0ЭИЦР1Ю в *this, а sourceBeg и sourceEnd определяют действительный интервал в source; в противном случае вызов приводит к непредсказуемым последствиям.

О Функция не генерирует исключений.

void списон:;sort О

void список::sort CCompFunc op)

О Обе версии сортируют элементы списка.

О Первая версия сортирует все элементы оператором <.

О Вторая форма сортирует все э.лементы списка, сравнивая элементы функцией ор:

opieleml .е]ет2)

О Порядок следования элементов с равными значениями сохраняется (если при вызове не было сгенерировано исключение).

О Это специализированные версии алгоритмов sort() и stable sort() (см. с. 389), оптимизированные для списков,

void список: -.тгде (список source)

void СЛИСОК::merge (список source. CompFunc op)

О Обе версии выполняют слияние элементов списков source и *this. О После вызова список source остается пустым.

О Если перед вызовом списки *this и source отсортированы по критерию < или ор, итоговый список тоже будет отсортирован. Строго говоря, стандарт требует, чтобы оба списка бьг.ли отсортированы перед вызовом, но на практике слияние также может выполняться и для несортированных списков. Тем не менее проведите дополнительную проверку, прежде чем выполнять слияние несортированных списков в своих программах.

О В первой форме используется оператор < в качестве критерия сортировки.

О Во второй форме используется необязательный критерий сортировки ор для сравнения двух элементов:

opieleml,elem2)

О Это специализированные версии алгоритма merge() (см. с. 406), оптимизированные для списков.

void список: :reyerse О

О Переставляет элементы списка в обратном порядке.



О Это специализированная версия алгоритма reverse() (см. с. 379), оптимизированная для списков.

О Функция не генерирует исключений.

Поддержка распределителей памяти

Все контейнеры STL могут испо.льзоваться со специальной моделью памяти, определяемой объектом-распределителем (см. главу 15), Здесь перечислены функции, обеспечивающие поддержку распределителей.

В спецификации стандартных контейнеров обязательно требуется, чтобы все экземпляры типа распределителя были взаимозаменяемыми. Таким образом, память, выделенная одним экземпляром, может быть освобождена другим экземпляром того же типа. Следовательно, перемещение элементов (и перераспределение занимаемой ими памяти) между контейнерами одного типа не создает проблем.

Основные типы и функции распределителей

нонтейнер::al1ocator type О Тип распределителя.

О Поддержртвается векторами, деками, списками, множествами, мультимножествами, отображениями, мультиотображениями, строками.

allocatortype контейнер::get allocator С) const

О Возвращает модель памяти контейнера.

О Поддержттвается векторами, деками, списками, множествами, мультимножествами, отображениями, мультиотображениями, строками.

Конструкторы с передачей необязательных параметров

explicit контейнер: -.контейнер (const Allocators alloc)

О Создает новый пустой контейнер, использующий модель памяти alloc.

О Поддерживается векторами, декамн, списками, множествами, мультимножествами, отображениями, мультиотображениямгг, строками.

контейнер: [контейнер (const CoiTipFunc& op. const Allocators alloc)

О Создает иовын пустой контейнер с критерием сортировки ор, нспо.льзующий модель памяти alloc.

О Критерий сортировки должен определять «строгую квазиупорядоченность» (см. с. 184).

О Поддерживается множествами, мультимножествами, отображениями, мультиотображениями.

контейнер:[контейнер (sizetype пит. const Т& value.

const Allocators alloc)

О Создает контейнер с пит элементами, испо.льзу1ощий модель памяти alloc. О Э.аементы создаются как копии value.



Операция

Страница

Гарантия

vector;: push back()

Либо завершается успешно, либо не вносит изменений

vector; ;insert()

Либо завершается успешно, либо не вносит изменений.

если при копировании/присваивании элементов

не генерируются исключения

Большое спасибо Грегу Колвину (Greg Colvin) и Дейву Абрахамсу (Dave Abrahams) за предоставленную таблицу.

ОТ - тип элементов контейнера. Для строк value передается по значению. О Поддерживается векторами, деками, списками, строками.

контейнер: -.нонтейнер (Inputlterator beg. Inputlterator end,

const Allocator& alloc)

О Создает контейнер, инициализированный всеми элементами из интервала beg,end) и использующий модель памяти alloc.

О Функция оформлена в виде нтаблонной функции класса (см. с. 28). Это означает, что элементы исходного интервала могут относиться к произвольному типу, который может быть преобразован к типу элементов контейнера.

О Поддерживается векторами, деками, списками, множествами, мультимножествами, отображениями, мультиотображениями, строками.

контейнер::контейнер (Inputlterator beg. Inputlterator end.

const CompFunc& op. const Allocators alloc)

О Создаст контейнер с критерием сортировки ор, ипициализиропанный всеми элементами из интервала [beg,end) и 11Спо.лт)Зующий модель памяти alloc.

О Функция оформлена в виде шаблонной функции класса (см. с 28). Это означает, что элементы исходного интервала могут относиться к произвольному типу, который может быть преобразован к типу элементов контейнера.

О Критерий сортировки должен определять «строгую квазиупорядоченность» (см. с. 184).

О Поддерживается множествами, мультимнолсествамн, отображениями, мультиотображениями.

Обработка исключений в контейнерах STL

Как упоминалось на с. 148, контейнеры предоставляют разный уровень гарантий в отношении исключений. Стандартная библиотека С++ гарантирует отсутствие утечки ресурсов н нарушения контейнерных инвариантов в отношении исключения, однако некоторые операции предоставляют более твердые гарантии (при условии, что аргументы удовлетворяют некоторым условиям): они могут гарантировать транзакционную безопасность (принятие/откат) и даже то, что они никогда не генерируют исключений. В табл. 6.35 перечислены все операции, для которых предоставляются такие гарантии.

Таблица 6.35. Контейнерные операции с особыми гарантиями в отношении исключений



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 [ 78 ] 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239