452_______ __________Часть III. Современное программирование на C++

. else cout « searchSA.KeyO.Getld() « " not found in dictionary." « endl;

students.Flush(); // Удаление элементов. return 0;

}

void WriteStudents(STUDENT_DICT sstudents) {

STUDENT_DICT_ITERATOR iterator(students) ;

cout « setiosflags(ios::fixed I ios::left) « setprecision(l);

while (iterator) (

const STUDENT_ASSOC *sap = iterator.Current();

cout « " " « setw(20) « sap->Value()->GetId() « " " « sap->Value()->GetGrade() « " Hash value = " « sap-Жеу () . HashValue () « endl;

++iterator;

) }

Очередь

Очередь (queue) похожа на очередь в супермаркете: первый обслуживается первым, второй вторым и т. д. Контейнер-очередь устроен также, доступ к элементам осуществляется по принципу FIFO: первым пришел — первым вышел (First In, First Out). Типичные классы типа очередь, реализованные как контейнеры элементов типа STUDENT:

typedef TQueueAsVector<STUDENT> STUDENT_VQUEUE;

typedef TIQueueAsVector<STUDENT> STUDENT_POINTER_VQUEUE;

typedef TQueueAsDoubleList<STUDENT> STUDENT_DLQUEUE;

typedef TIQueueAsDoubleList<STUDENT> STUDENT_POINTER_DLQUEUE;

Конструкторы для очередей, реализованных как вектор имеют необязательный параметр, определяющий размер контейнера. По умолчанию он имеет значение DEFAULT_QUEUE_SIZE, определенное в файле resource.h в каталоге \Bc5\Include\Classlib. Для того чтобы определить очередь из 100 элементов, используется оператор:

STUDENT_VQUEUE studentQueuel(100) ;

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

STUDENT_DLQUEUE studentQueue2;

Функции-члены Flush, ForEach, LastThat, FirstThat, IsEmpty И IsFull имеют

такие же свойства, что и аналогичные функции для двусторонних очередей. (См. раздел "Двусторонние очереди").