Шаг 142.
Библиотека STL.
Контейнеры STL. Возможности деков
   
На этом шаге мы  перечислим особенности деков.
   
По своим возможностям деки во многом отличаются от векторов.
-  Вставка и удаление выполняются быстро как в начале, так и в конце (для векторов эти операции выполняются быстро только в 
конце). Операции выполняются с амортизированным постоянным временем.
 -  Внутренняя структура содержит дополнительный уровень ссылок, поэтому обращение к элементам и перемещение итератора в 
деках обычно выполняются чуть медленнее.
 -  Итераторы должны быть умными указателями особого типа. Обычные указатели не подходят из-за необходимости перехода 
между блоками.
 -  В системах с ограниченными размерами блоков памяти (например, в некоторых системах PC) дек может содержать 
больше элементов, поскольку он не ограничивается одним блоком памяти. Следовательно, функция max_size() может 
возвращать для деков большую величину.
 -  Деки не позволяют управлять емкостью и моментом перераспределения памяти. В частности, при любых операциях вставки 
и удаления, выполняемых не в начале или конце вектора, становятся недействительными все указатели, ссылки и итераторы, 
ссылающиеся на элементы дека. Однако перераспределение памяти в общем случае выполняется более эффективно, чем для векторов, 
потому что из-за особенностей своей внутренней структуры декам не приходится копировать все элементы.
 -  Освобождение неиспользуемых блоков может привести к уменьшению объема памяти, занимаемой деком (хотя как это 
происходит и происходит ли вообще, зависит от реализации). Следующие особенности векторов характерны также и для деков.
 -  Вставка и удаление элементов в середине контейнера выполняется относительно медленно, потому что для освобождения места 
или заполнения пропуска приходится перемещать элементы с обоих концов.
 -  Итераторы являются итераторами произвольного доступа.
 
   
Подведем итог. Выбирайте дек, если выполняются следующие условия:
-  вставка элементов выполняется с обоих концов (классический пример очереди);
 -  в программе не используются ссылки на элементы контейнера; 
 -  важно, чтобы контейнер освобождал неиспользуемую память (хотя стандарт таких гарантий не дает).
 
   
Интерфейс векторов и деков почти не отличается. Если в программе не используются специфические возможности вектора или дека, 
вы можете легко опробовать оба контейнера.
   
На следующем шаге мы рассмотрим операции над деками.
Предыдущий шаг 
 
Содержание 
 
Следующий шаг