Хелпикс

Главная

Контакты

Случайная статья





Контейнери



Контейнери

У наступній таблиці приведені основні класи контейнерів бібліотеки STL.

 

Тип контейнера Клас контейнера Деректива #include

Послідовні контейнери

(Sequence containers)

vector – масиви < vector >
deque – двостороння черга <deque>
lіst – списки < lіst>

Асоціативні контейнери

(Associative containers)

map, multіmap – карти; це структури, подібні до масиву, але в яких роль "індексу" можуть відігравати не тільки цілі числа, але будь-які упорядковані типи <map>
set, multіset – множини <set>
bitset – множини як бітові набори <bitset>

Адаптори

(Container adaptors)

queue – черги, організовані за принципом FIFO priority queue – пріоритетні черги <queue>
stack – стеки, організовані за принципом LIFO <stack>

 

Як уже зазначалось, контейнер призначений для збереження об'єктів. Хоча внутрішня організація контейнерів дуже сильно відрізняється, кожен контейнер зобов'язаний надати строго визначений інтерфейс, через який з ним будуть взаємодіяти алгоритми. Цей інтерфейс забезпечують ітератори. Кожен контейнер зобов'язаний мати відповідний йому ітератор. Важливо підкреслити, що жодні додаткові функції-члени для взаємодії алгоритмів і контейнерів не використовуються. Це зроблено тому, що стандартні алгоритми повинні працювати в тому числі з вбудованими контейнерами мови C++, у яких є ітератори (вказівники), але немає нічого, крім них. Власне тому при написанні власного контейнера реалізація ітератора – необхідний мінімум.

Кожен контейнер реалізує визначений тип ітераторів. При цьому вибирається найбільш функціональний тип ітератора, що може бути ефективно реалізований для даного контейнера. "Ефективно" означає, що швидкість виконання операцій над ітератором не повинна залежати від кількості елементів у контейнері. Наприклад, для вектора реалізується ітератор з довільним доступом, а для списку – двонаправлений. Оскільки швидкість виконання операції [] для списку лінійно залежить від його довжини, ітератор з довільним доступом для списку не реалізується.

Незалежно від фактичної організації контейнера елементи, що зберігаються в ньому, можна розглядати як послідовність. Ітератор першого елемента в цій послідовності повертає функція begіn(), а ітератор елемента, що слідує за останнім – функція end(). Це дуже важливо, тому що всі алгоритми в STL працюють саме з послідовностями, заданими ітераторами початку і кінця. Крім звичайних ітераторів у STL існують зворотні ітератори (reverse іterator). Зворотній ітератор відрізняється тим, що переглядає послідовність елементів у контейнері в зворотному порядку. Іншими словами, операції + і – у нього міняються місцями. Це дозволяє застосовувати алгоритми як до прямої, так і до зворотної послідовності елементів.

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.