- •1Основні теоретичні відомості
- •1.1Шаблоні функції
- •1.2Шаблоні класи
- •1.3Стандартна бібліотека шаблонів
- •2Порядок виконання та індівідуальні завдання
- •2.1Порядок виконання роботи
- •2.2Індивідуальні завдання для розробки шаблонних функцій
- •2.3Індивідуальні завдання для розробці шаблонних класів
- •2.4Індивідуальні завдання підвищеної складності
- •Перелік рекомендованої літератури
1.3Стандартна бібліотека шаблонів
Стандартна бібліотека шаблонів (STL) є основним компонентом стандартної бібліотеки ANSI/ISO для мови програмування С++. Цей компонент був розроблений в лабораторії Hewlett-Packard Олександром Степановим та Менгом Лі.
Бібліотека STL – це набір шаблонних класів і функцій загального призначення.
Ядро стандартної бібліотеки шаблонів включає три основні елемента: контейнери, алгоритми, ітератори. Вони працюють спільно один з другим, що допомагає отримувати готові рішення різноманітних завдань з програмування [1, 2, 6].
Контейнери – це об’єкти, що містять інші об’єкти.
У бібліотеці визначені послідовні та асоціативні контейнери. Кожний контейнерний тип визначає набір функцій, що можливо застосовувати до цього контейнеру. Узагальнену уяву контейнеру наведено на рис. 1.1.
В таблиці 1.1. наведений перелік основних контейнерів та заголовочні файли, де містяться ці контейнери.
Рисунок 1.1 – Узагальнена уява контейнеру
Для забезпечення кращого переміщення програми, при використанні стандартної бібліотеки шаблонів, необхідно завжди явно включати стандартний простір імен:
using namespace std;
Таблиця 1.1 – Контейнерні класи бібліотеки STL
Контейнер |
Опис |
Заголовок |
bitset |
Бітова множина |
<bitset> |
deque |
Дек (двостороння черга, або черга з двостороннім доступом) |
<deque> |
list |
Лінійний список |
<list> |
map |
Відображення. Зберігає пари ключ/значення, де кожний ключ зв’язаний тільки з одним значенням |
<тар> |
multimap |
Мультівідображення. Зберігає пари ключ/значення, де кожний ключ може бути зв’язаний з двома або з більшою кількістю значень |
<map> |
multiset |
Множина, де кожний елемент необов’язково унікальний (мультімножина) |
<set> |
priority_queue |
Приоритетна черга |
<queue> |
queue |
Черга |
<queue> |
set |
Множина, де кожний елемент унікальний |
<set> |
stack |
Стек |
<stack> |
vector |
Динамічний масив |
<vector> |
Алгоритми обробляють зміст контейнеру. Багато алгоритмів працює з діапазоном елементів контейнеру.
Алгоритми це частина STL, що більш всього нагадує традиційну бібліотеку функцій. Але головна їх різниця втому, що вони – шаблоні функції.
За рідким виключанням, ці шаблоні функції використовують аргументи-ітератори для маніпулювання послідовностями.
Для використання алгоритмів необхідно додати в програму заголовок <algorithm>.
Ітератори подібні покажчикам. Вони дозволяють циклічно опитувати зміст контейнеру практично таким же чином як це робиться за допомогою покажчика при циклічному опитуванні елементів масиву.
Ієрархію категорій ітераторів можна подати у вигляді трьох рядів. Для доступу до послідовності тільки для запису використовуйте наступний ряд:
а) ітератор виводу:
послідовний ітератор;
двонаправлений ітератор;
ітератор довільного доступу.
Стрілка праворуч означає “може бути замінений на”. Тому будь-який алгоритм, що визиває ітератор виводу, повинен, наприклад, працювати з послідовним ітератором, але не навпаки.
Для доступу до послідовності тільки для читання використовуйте наступний ряд:
б) ітератор вводу:
послідовний ітератор;
двонаправлений ітератор;
ітератор довільного доступу.
У даному випадку ітератор ввода найбільш слабкий в усіх категоріях.
Нарешті, для доступу до послідовності по читанню/запису можна використовувати такий ряд:
в) ітератор вводу:
двонаправлений ітератор;
ітератор довільного доступу.
Пам`ятайте, що покажчик на об`єкт завжди може служити в якості ітератора довільного доступу. Тому він може служити в якості любої із категорій ітератора, якщо він підтримує відповідний доступ по читанню/запису до послідовності, на яку він вказує.
Перелік методів контейнерних класів та основних алгоритмів наведений у [6,7,10].
