460_____________________Часть III. Современное программирование на C++
ена в алгоритмы. В то время как в BIDS широко применяется наследование, в STL роль наследования сведена к минимуму.
Поскольку общая функциональность STL реализована в глобальных функциях, которые работают со всеми контейнерами, исходный код оказывается более коротким, чем при использовании BIDS, когда функции встроены в отдельные контейнеры. Другое преимущество STL — гибкость. Алгоритмы STL могут быть применены к массивам и указателям стандартного С, а не только к контейнерам STL.
Для работы с алгоритмами или контейнерами STL заголовки из каталога \BC\INCLUDE включаются в исходные файлы. Так, например, чтобы использовать контейнер вектор, в исходный файл следует поместить оператор:
ftinclude <vector.h>
STL состоит из пяти основных компонентов:
• Контейнер (container): Хранение данных.
• Алгоритм (algorithm): Функция, применяемая к хранимым данным.
• Итератор (iterator): Средство доступа к хранимым данным.
• Объект-функция (function object): Инкапсулирует функцию для использования другими компонентами.
• Адаптер (adaptor): Модифицирует существующие компоненты для построения новой функциональности.
Алгоритмы действуют на контейнеры посредством итераторов, которые обеспечивают алгоритмам последовательный доступ к данным.
Объект-функция — это экземпляр класса, который инкапсулирует определение функции с помощью операции о. Объект такого класса затем может быть передан другому компоненту. Этот метод передачи функций безопаснее и эффективнее использования функторов.
Адаптеры могут изменять интерфейс существующих компонентов. Адаптеры могут быть трех видов: адаптеры-контейнеры (container adaptors), адаптеры-итераторы (iterator adaptors) и адаптеры-функции (function adaptors). Примером адаптера-контейнера является стек. Для создания стека существующий контейнер используется как параметр. С помощью определения для класса STUDENT из листинга 18.1, стек из объектов STUDENT создается следующим образом:
typedef stack<vector<STUDENT> > STUDENT_STACK;
STUDENT_STACK studentStack;
Адаптеры-итераторы и адаптеры-функции работают аналогично. '
Контейнеры
Существует два типа контейнеров: последовательные контейнеры (sequence containers) и ассоциативные контейнеры (associative containers). Объекты в