Глава 18. Классы-контейнеры_______________________________455

Конструкторы для классов реализуемых как векторы имеют необязательный параметр, определяющий максимальный размер стека:

STUDENT_VSTACK studentStackl(100); // в стек можно поместить 100 элементов

Значение по умолчанию равно DEFAULT_STACK_SIZE и определяется в файле \Bc5\Include\Classlib\resource.h.

Реализация стека как списка является динамической. Размер контейнера может расти и уменьшаться. Конструктор стека не имеет аргументов:

STUDENT_LSTACK studentStack2; -

Большинство функций-членов такое же, как для других контейнеров: Flush,

GetItemsInContainer, ForEach, FirstThat, LastThat, IsEmpty И IsFull. (CM. раз-

дел "Массивы").

Элементы вставляются в стек с помощью функции-члена push, которая принимает объект или указатель на него в зависимости от того, является контейнер прямым или косвенным. (См. раздел "Прямые и ко&венные контейнеры").

Доступ к элементам контейнера осуществляется через функции pop и тор. Pop удаляет объект с верхушки стека, тор возвращает объект с верхушки, но оставляет его на месте.

Листинг 18.13 демонстрирует использование контейнера-стека, реализованного как список.

h04551.jpg

ftinclude <iostream.h> ftinclude <iomanip.h>

#include <classlib\stacks.h> .•

#include "studentl.h"

// Прямой стек. typedef TStackAsVector<STUDENT> STUDENT_STACK;

// Итератор BIDS typedef TStackAsVectorIterator<STUDENT> STUDENT_STACK_ITERATOR;

// Размещение элементов в контейнере. void WriteStudents(STUDENT_STACK&) ;

int main() {

STUDENT_STACK students;

students.Push(STUDENT("JohnBown", 1.0)) ;

students.Push(STUDENT("BubbaJones", 2.0));

students.Push(STUDENT("SallyRide", 3.0)) ;

students.Push(STUDENT("JoeLamb", 4.0));

cout « "Initial stack of students:" « endl;

WriteStudents(students);