- •Введение. Принципы объектно-ориентированного программирования
- •Глава 1. Классы и объекты
- •1.1. Операция разрешения области видимости ::
- •1.2. Перечислимый тип
- •1.3. Модификатор const
- •1.4. Новый тип данных – ссылка &
- •Inline определение_функции
- •2. Определение класса. Сокрытие информации.
- •3. Объект.
- •4. Конструкторы и деструкторы
- •4.1.Назначение конструктора
- •4.2. Конструктор копирования
- •X::X(X&); // где X – имя класса
- •4.3. Деструктор
- •5. Неявный указатель this
- •6. Перегрузка операций
- •7. Примеры перегрузки некоторых операций
- •7.1. Перегрузка операции [ ]
- •7.2. Перегрузка операции ()
- •7.6. Перегрузка операции (тип)
- •8. Дружественность
- •Istream
- •10. Массивы объектов.
- •11. Функции- и классы-шаблоны
- •11.1 Функции-шаблоны (родовые функции)
- •11.2 Классы-шаблоны
- •12. Член-данные класса – объекты другого класса: агрегированные классы.
- •Глава 2. Наследование. Полиморфизм
- •1. Базовый и порожденный классы
- •2. Конструкторы порожденного класса
- •3. Стандартные преобразования при наследовании
- •4. Множественное наследование. Виртуальный базовый класс
- •4.1. Прямые базовые классы
- •4.2. Виртуальный базовый класс
- •5. Полиморфизм, раннее и позднее связывание, виртуальные функции
- •5.1 Раннее (статическое) и позднее (динамическое) связывание
- •5.2. Определение виртуальной функции
- •5.3. Чистая виртуальная функция и абстрактный класс
- •5.4. Правила определения виртуальных функций
- •5.5. Механизм позднего связывания
- •6. Библиотека fstream – работа с файлами
- •Глава 3. Библиотека стандартных шаблонов (бсш). Контейнеры
- •1. Контейнер. Структура бсш.
- •2. Контейнер Vector – динамический массив
- •Контейнер list – список
- •4. Контейнер Set – множество
- •Содержание
- •Глава 1. Классы и объекты
- •Глава 2. Наследование. Полиморфизм
- •Глава 3. Библиотека стандартных шаблонов (бсш). Контейнеры
Глава 3. Библиотека стандартных шаблонов (бсш). Контейнеры
Рассказ о библиотеке стандартных шаблонов необходимо начать с признания того факта, что она представляет собой вершину искусства программирования и в ней используются самые изощренные свойства С++.
Герберт Шилдт. Самоучитель С++, стр. 419
При программировании задач разного типа наиболее распространенными структурами представления данных являются массивы, строки, списки, стеки, множества, деревья и т.д. С появлением технологии ООП, включая такие понятия как классы-шаблоны и функции-шаблоны, возникло желание стандартизировать часто используемые структуры данных – их хранение и обработку – создав набор стандартных классов. Идеология их создания претерпела несколько этапов.
1. Сначала была создана иерархия классов (около 22 классов), в основе которой лежал абстрактный класс Object. Однако применение этих классов оказалось сложным, т.к. их можно было использовать в основном для обработки данных этой же иерархии или порожденных из них. А, например, для применения класса Stack для целых чисел необходимо было из класса Object породить класс Integer, определив 5 виртуальных функций вспомогательного характера.
2. Затем на основе понятия класса-шаблона фирмой Borland была создана библиотека стандартных классов-шаблонов двух уровней FDS (векторы, списки) и ADT(стеки, очереди, множества).
3. С появлением версий языка C++ выше третьей, распространение получила библиотека STL ( Standard Template Library), построенная на основе классов-шаблонов.
1. Контейнер. Структура бсш.
Контейнерный класс – это класс-шаблон, в котором типы данных объявлены произвольными, а набор операций и функций над ними фиксирован. Таким образом, можно сказать, что контейнер – это объект, предназначенный для хранения и обработки других объектов. Ядро БСШ состоит из следующих основных компонент:
контейнеров,
итераторов,
алгоритмов,
распределителей.
Контейнеры – это классы-шаблоны. Для каждого из классов определен набор конструкторов, деструкторы, характерные для класса операции и функции.
Итераторы – это объекты специальных классов, предназначенные для перебора объектов в контейнерах. По своей сути, итератор – это указатель на объекты контейнера. Для каждого класса-шаблона предназначен свой итератор. Действительно, алгоритмы перебора разных объектов отличаются: элементы массива выбираются обычно произвольно с помощью индекса (прямой доступ), а в связанном списке используется последовательный доступ по полю связи, например, p = p –> next. Итераторы позволяют перебирать элементы с начала контейнера или с конца (обратные итераторы).
Алгоритмы – это набор функций-шаблонов, выполняющих однотипную обработку объектов разных контейнеров. Например, сортировку (пирамидальную), слияние, бинарный поиск, поиск максимума и минимума, удаление элементов и т.д. (Всего 66 функций).
Распределители памяти – это объекты специального класса allocator, управляющие процессом выделения памяти для контейнеров.
Для использования того или иного контейнера, надо подключить соответствующую библиотеку.
Перечислим часто используемые контейнеры:
Контейнер |
Назначение |
Заголовочный файл |
Degue |
Двусторонняя очередь (дек) |
<degue.h> |
List |
Линейный двунаправленный список |
<list.h> |
Queue |
Очередь (удаление сначала, добавление – с конца) |
<queue.h> |
Set |
Множество (элементы не повторяются) |
<set.h> |
Stack |
Стек |
<stack.h> |
vector |
Динамический массив |
<vector.h> |
В библиотеку входит также не контейнерный класс string. Для использования функций шаблонов библиотеки надо подключить заголовочный файл <algorithm.h>.
Ниже приведена структура библиотеки стандартных шаблонов БСШ:
