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

1 ... 76 77 78 [ 79 ] 80 81 82 ... 239


Операция

Страница

Гарантия

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) и 1ГСпо.льзующий модель памяти alloc.

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

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

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

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

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

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



Операция

Страница

Гарантия

vector;; pop back()

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

vector; ;erase()

He генерирует исключений, если они не генерируются при копировании/присваивании элементов

vector; :clearO

Не генерирует исключений, если они не генерируются при копировании/присваивании зпементов

vector; ;swap()

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

deque; ;push back()

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

deque::push front()

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

deque: :insert()

Либо завершается успешно либо не вносит изменений, если при копировании/присваивании элементов не генерируются исключения

deque: :pop back()

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

deque; :pop front()

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

deque: :erase()

Не генерирует исключений, если они не генерируются при копировании/присваивании элементов

deque; ;clear()

Не генерирует исключений, если они не генерируются при копировании/присваивании элементов

deque; :swap()

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

list;:push back()

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

list::push frontO

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

list;:insert()

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

list;:pop back()

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

list;:pop front()

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

list::erase()

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

list::clear()

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

list::remove()

Не генерирует исключений, если они не генерируются при сравнении элементов

list;;remove if()

Не генерирует исключений, если они не генерируются предикатом

list::unique()

Не генерирует исключений, если они не генерируются при сравнении элементов

list;;splice()

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

list:;merge()

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

list;;reverse()

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

list;:swap()

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



Таблица 6.35 (продолжение)

Операция

Страница

Гарантия

[multi]set:;insert()

При вставке одного элемента либо завершается успешно, либо не вносит изменений

[multi]set;:erase()

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

[multi]set;;clear()

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

[multi]set::swap()

Не генерирует исключений, если они не генерируются при копировании/присваивании критерия сравнения

[multi]map::insert()

При вставке одного элемента либо завершается успешно, либо не Вносит изменений

[multi]map::erase()

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

[multi]map;:clear()

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

[multi]map::swap()

Не генерирует исключений, если они не генерируются при копировании/присваивании критерия сравнения

Векторы, деки и списки также предоставляют особые гарантии для resize(). В соответствии с ними последствия от вызова resize() эквивалентны либо вызову erase(), либо вызову insert(), либо отсутствию операции:

void нонтейнер:-.resize (size type num, Т value = ТО)

if (num > SizeO) {

insert (endO. nu[ii-size(), value):

else if (num < sizeO) {

erase (beginC)+nu[ii, endO);

Иначе говоря, предоставляемые гарантии определяются комбинацией гарантий для erase() и insert() (см. с. 249).



1 ... 76 77 78 [ 79 ] 80 81 82 ... 239

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