Контейнерный класс – это класс-шаблон, в котором типы данных объявлены произвольными, а набор операций и функций над ними фиксирован. Таким образом, можно сказать, что контейнер – это объект, предназначенный для хранения и обработки других объектов. Ядро БСШ состоит из следующих основных компонент:
Контейнеры – это классы-шаблоны. Для каждого из классов определен набор конструкторов, деструкторы, характерные для класса операции и функции.
Итераторы – это объекты специальных классов, предназначенные для перебора объектов в контейнерах. По своей сути итератор – это указатель на объекты контейнера. Для каждого класса-шаблона предназначен свой итератор. Действительно, алгоритмы перебора разных объектов отличаются: элементы массива выбираются обычно произвольно с помощью индекса (прямой доступ), а в связанном списке используется последовательный доступ по полю связи, например 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>.