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 имеют
такие же свойства, что и аналогичные функции для двусторонних очередей. (См. раздел "Двусторонние очереди").