ве из располагающихся подряд значений) или в связном списке. Контейнеры 
скрывают детали своей внутренней реализации, так что вы можете поменять метод 
хранения данных без последующего переписывания вашего кода. С помощью 
контейнерных классов можно выбрать наилучшие методы хранения для вашего 
приложения, которые легко изменяются впоследствии. 

    АТД и ФСД 

    Контейнерный класс — это абстрактный тип данных (АТД). Он обеспечивает 
абстракцию методов хранения данных, например стек — АТД с такими функциями, 
как Push() и Рор(), для запоминания и восстановления данных методом стека. 
Внутренняя реализация этих функций не зависит от концепции стека. Вы можете 
создать стек с помощью вектора или использовать список. Стек — просто метод 
программирования, абстракция, которая не имеет ничего общего с конкретными 
деталями реализации внутреннего хранения данных в нем. 
    Однако векторы и списки неотделимы от их внутренней структуры. Поэтому они 
называются фундаментальными структурами данных (ФСД). Не давая точного 
определения, можно сказать, что ФСД — любая структура, которая может 
использоваться для реализации АТД. Например, можно реализовать класс стека 
(АТД) с помощью связного списка (ФСД). Или же вы можете реализовать стек с 
помощью другого фундаментального типа. 

    ЗАМЕЧАНИЕ 

    Гуру C++, без сомнения, только для того, чтобы привести нас в 
замешательство, называют массивы векторами. Однако в действительности это не 
одно и то же. Вектор — это фундаментальная структура данных, в которой объекты 
запоминаются один за другим. Массив же — это абстракция, обеспечивающая 
случайный доступ к объектам посредством оператора индексирования []. Как 
контейнер массив можно реализовать с помощью вектора, списка или другого 
фундаментального механизма запоминания данных.
 
    В каждом контейнерном классе комбинируются один АТД и одна ФСД. Имя 
результирующего класса может звучать как TArrayAsVector. По такому имени можно 
определить, что контейнер — это массив (АТД), реализованный вектором (ФСД). 
Начальная буква Т означает "тип". 
    В библиотеке шаблонов Borland — широкий выбор шаблонов АДТ и ФСД плюс 
несколько других классов. Для того чтобы воспользоваться контейнерным 
классом, следует задать тип данных, которые вы собираетесь запоминать, в 
общем виде: TClass<T>, где Т — ваш тип данных. Например, TStackAsList<long> 
задает стековый   контейнерный   класс,    способный   запоминать   длинные   
целые   объекты   в   связном   списке; TQueueAsVector<MyDataType> создает 
контейнерный класс очереди, в котором можно запоминать объекты типа MyDataType 
с использованием вектора в качестве внутреннего механизма запоминания данных. 
    Контейнеры могут содержать простые объекты (целые, вещественные и т.д.), 
структурные данные (массивы, строки и структуры) и объекты классов. Вы 
можете хранить в контейнере непосредственно сами объекты или же указатели на 
них. Возможности хранения данных практически безграничны. 

    Как создать контейнер         

    Покажем на простом примере, как создаются контейнерные классы. Сначала 
следует включить один или несколько заголовочных файлов, содержащихся в 
подкаталоге INCLUDE\CLASSLIB каталога C:\BC45. Например, для того чтобы 
воспользоваться стековым контейнером, следует включить заголовочный файл STACKS.H. 

    «include <classlib\stacks.h>	

    Затем создайте контейнерный объект одного из классов, содержащихся в 
заголовочном файле, например   TStack As Vector. Поищите конструктор класса 
в вашем справочнике по библиотекам ВС45.	

    TStackAsVector(unsigned max = DEFAULT_STACK_SIZE); 

    Прототип конструктора этого класса свидетельствует о том, что можно задать 
необязательный параметр, определяющий максимальный размер стека, или же 
воспользоваться значением по умолчанию, определенным в заголовочном файле 
RESOURCE.H. Необходимо также снабдить шаблон типом данных, который вы 
собираетесь в нем хранить. Например, создать стековый контейнер для 
вещественных объектов двойной точности можно следующим образом: 

    TStackAsVector<double> myStack(100); 

    Это объявление создаст контейнер с именем myStack из шаблона класса 
TStackAsVector, способный хранить до ста вещественных значений двойной 
точности. Большинство контейнеров автоматически увеличивает свой размер для 
хранения большего числа данных, поэтому значения просто определяют начальный 
размер контейнера, они ие обязательно ограничивают контейнер фиксированным 
числом объектов. 


    Глава 16. Библиотека шаблонов классов Borland	425 
