Глава 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 демонстрирует использование контейнера-стека, реализованного как список.
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);