Спеціалізовані контейнери можна створювати з базових за допомогою конструкції, що називається адаптером контейнера. Вони мають простіший інтерфейс, ніж звичайні контейнери. Спеціалізовані контейнери, реалізовані у STL – це стеки, черги і пріоритетні черги. Як відомо, для стеку характерний доступ тільки з одного кінця. Черга використовує для проштовхування один кінець, для виштовхування – інший. В пріоритетній ерзі дані проштовхуються спереду в довільному порядку, а виштовхуються у строгій відповідності з величиною збережуваного значення. Таким чином, пріоритетна черга автоматично сортує інформацію, яка в ній зберігається.
Стеки, черги і пріоритетні черги можуть створюватися з різних послідовних контейнерів, хоча, наприклад, черга з двостороннім доступом використовується теж досить часто. В таблиці 10.4 показані абстрактні типи і послідовні контейнери, що використовуються для їх реалізації.
Таблиця 15.4
Контейнери, що реалізуються за допомогою адаптерів
Контейнер
| Реалізація
| Характеристики
|
Стек
| Реалізується як вектор, список або черга з двостороннім доступом
| Проштовхування і виштовхування даних тільки з одного кінця
|
Черга
| Реалізується як список або черга з двостороннім доступом
| Проштовхування з одного кінця, виштовхування з іншого
|
Пріоритетна черга
| Реалізується як вектор або черга з двостороннім доступом
| Проштовхування з одного кінця у випадковому порядку, виштовхування – впорядковане, з іншого кінця
|
Для практичного використання цих класів необхідно використовувати наче шаблон тв шаблоні. Наприклад, нехай маємо об’єкт класу «стек», що містить значення int, породжений класом «черга з двостороннім доступом» (deque)
stack< deque<int> >astak
Щоб компілятор не видавав повідомлення про помилку, інтерпретуючи >> як оператор, слід обов’язково робити пропуск між двома закриваючими кутовими дужками.