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). Объекты в