Шаг 155.
Библиотека STL.
Контейнеры STL. Операции над списками. Обработка исключений

    На этом шаге мы рассмотрим особенности обработки исключений в списках.

    Из всех стандартных контейнеров STL списки наиболее надежны в отношении исключений. Практически все операции над списками либо завершаются успешно, либо не вносят изменений. Такая гарантия не предоставляется только операторами присваивания и функцией sort() (они дают лишь обычную "базовую гарантию" отсутствия утечки ресурсов и нарушения контейнерных инвариантов при возникновении исключений). Функции merge(), remove(), remove_if() и unique() предоставляют гарантии при условии, что исключения не будут сгенерированы при сравнении элементов оператором == или предикатом. Таким образом, в терминологии программирования баз данных можно сказать, что списки обладают транзакционной безопасностью, если не использовать операцию присваивании и функцию sort(), а также проследить за тем, чтобы исключения не генерировались при сравнении. В таблице 1 перечислены все операции, предоставляющие специальные гарантии в отношении исключений. Обработка исключений в STL более подробно рассматривается на 121 шаге.

Таблица 1. Операции над списками, предоставляющие особые гарантии в отношении исключений
Операция Описание
push_back() Либо завершается успешно, либо не вносит изменений
push_front() Либо завершается успешно, либо не вносит изменений
insert() Либо завершается успешно, либо не вносит изменений
pop_back() He генерирует исключений
pop_front() He генерирует исключений
erase() He генерирует исключений
clear() He генерирует исключений
resize() Либо завершается успешно, либо не вносит изменений
remove() He генерирует исключений, если они не будут сгенерированы при сравнении элементов
remove_if() He генерирует исключений, если они не будут сгенерированы предикатом
unique() He генерирует исключений, если они не будут сгенерированы при сравнении элементов
splice() He генерирует исключений
merge() Либо завершается успешно, либо не вносит изменений (если исключения не будут сгенерированы при сравнении элементов)
reverse() He генерирует исключений
swap() He генерирует исключений

    На следующем шаге мы рассмотрим пример использования списков.




Предыдущий шаг Содержание Следующий шаг