- •7. Робота з шаблонними, функціями та класами
- •7.1. Поняття про узагальнені функції
- •7.1.1. Механізм реалізації шаблонної функції з одним узагальненим типом
- •7.1.2. Безпосередньо задане перевизначення узагальненої функції
- •7.1.3. Шаблонна функція з двома узагальненими типами
- •7.1.4. Механізм перевизначення специфікації шаблону функції
- •7.1.5. Використання стандартних параметрів у шаблонних функціях
- •7.2. Поняття про узагальнені класи
- •7.1.6. Обмеження, які застосовуються при використанні узагальнених функцій
- •7.1.7. Приклад створення узагальненої функції abs()
- •7.2.1. Створення класу з одним узагальненим типом даних
- •7.2.2. Створення класу з двома узагальненими типами даних
- •7.2.3. Приклад створення узагальненого класу для організації безпечного масиву
- •7.2.4. Використання в узагальнених класах аргументів, що не є узагальненими типами
- •11.2.1. Передача покажчиком на функцію її адреси іншій функції
- •9.2.3. Класи потоків
- •9.3. Особливості механізмів перевизначення операторів введення-виведення даних
- •9.3.1. Створення перевизначених операторів виведення даних
- •9.5. Організація файлового введення-виведення даних
- •9.5.1. Відкриття та закриття файлу
- •9.5.2. Зчитування та запис текстових файлів
- •9.5.3. Неформатне введення-виведення даних у двійковому режимі
- •9.5.4. Зчитування та записування у файл блоків даних
- •10. Динамічна ідентифікація типів і оператори приведення типу
- •10.1. Динамічна ідентифікація типів
- •10.1.1. Отримання типу об'єкта у процесі виконання програми
- •10.1.2. Приклад rtti-застосування
- •11. Поняття про простори імен та інші ефективні програмні засоби
- •11.1. Особливості організації простору імен
- •11.1.1. Поняття про простори імен
- •11.1.2. Застосування настанови using
- •11.1.3. Неіменовані простори імен
- •11.1.4. Застосування простору імен std
- •11.2. Застосування покажчиків на функції
- •11.2.2. Пошук адреси перевизначеної функції
- •11.3. Поняття про статичні члени-даних класу
- •11.5. Застосування до функцій-членів класу модифікаторів const і mutable
- •11.6. Використання explicit-конструкторів
- •12. Введення в стандартну бібліотеку шаблонів
- •12.1. Огляд стандартної бібліотеки шаблонів
- •12.2. Поняття про контейнерні класи
- •12.3. Механізми роботи з векторами
- •12.3.1. Доступ до елементів вектора за допомогою ітератора
- •12.3.2. Вставлення та видалення елементів з вектора
- •12.3.3. Збереження у векторі об'єктів класу
- •12.3.4. Доцільність використання ітераторів
- •7. Робота з шаблонними, функціями та класами 1
- •7.1. Поняття про узагальнені функції 1
- •10. Динамічна ідентифікація типів і оператори приведення типу 26
- •11. Поняття про простори імен та інші ефективні програмні засоби 31
- •12. Введення в стандартну бібліотеку шаблонів 44
12.2. Поняття про контейнерні класи
Як уже зазначалося вище, контейнери є об'єктами бібліотеки STL, основне призначення яких – зберігання даних різних типів. Контейнери, які визначаються в бібліотеці STL, представлено в табл. 12.1. У ній також вказано заголовки, які необхідно помістити у програму під час використання кожного контейнера. Незважаючи на те, що клас string також є контейнером, який дає змогу зберігати і обробляти символьні рядки, однак він у цю таблицю не внесений і розглядається нижче у цьому розділі.
Табл. 12.1. Контейнери, визначені в бібліотеці STL
Контейнер |
Опнс |
Заголовок |
1 |
2 |
3 |
bitset |
Набір бітів |
<bitset> |
deque |
Дек (двобічна черга, або черга з двобічним доступом) |
<deque> |
list |
Лінійний список |
<list> |
map |
Відображення, зберігає пари "ключ-значення". в яких кожен ключ пов'язаний тільки з одним значенням |
<map> |
multimap |
Мультнвідображення, зберігає пари "ключ-значення". в яких кожен ключ може бути пов'язаний з двома або більше значеннями |
<map> |
multiset |
Множина, у якій кожен елемент необов'язково унікальний (мультнмножина) |
<set> |
priority_queue |
Пріоритетна черга |
<queue> |
queue |
Черга |
<queue> |
set |
Множина, у якій кожен елемент унікальний |
<set> |
stack |
Стек |
<stack> |
vector |
Динамічний масив |
<vector> |
Оскільки імена типів у оголошеннях шаблонних класів довільні, контейнерні класи оголошують typedef-версії цих типів, що конкретизує імена типів. Деякі з найбільш популярних typedef-імен мають таке призначення:
size_type |
Певний цілий тип. приблизно аналогічний типу size_t |
reference |
Посилання на елемент |
const reference |
Константне (const-) посилання на елемент |
iterator |
Ітератор |
const iterator |
Константний (const-) ітератор |
reverse iterator |
Реверсивний ітератор |
const reverse iterator |
Константний реверсивний ітератор |
value_type |
Тип значення, яке зберігається у контейнері (те саме, що і узагальнений тип туТуре) |
allocator_type |
Тип розподільника (пам'яті) |
key_type |
Тип ключа |
key compare |
Тип Функції, яка порівнює два ключі |
mapped_type |
Тип значення, яке зберігається у відображенні (те саме, що і у загальнений тип туТуре) |
value_compare |
Тип функції, яка порівнює два значення |
Оскільки в одному розділі неможливо розглянути всі контейнери, то в наступних розділах ми подамо тільки три з них: vector, list і map. Якщо Ви зрозумієте, як працюють ці три контейнери, у Вас не буде проблем з використанням інших.
