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

/ / итератор, поддерживаемый BIDS typedef TIBagAsVectorIterator<STUDENT> STUDENT_BAG_ITERATOR;

// Помещение списка студентов в контейнер. void WriteStudents(STUDENT_BAG&) ;

int main() (

STUDENT_BAG students(10);

students.Add(new STUDENT("JohnNewton", 1.0));

students-Add(new STUDENT("DeanBrown", 2.0));

students .Add (new STUDENT ("CarlBishop", 3.0));

students.Add(new STUDENT("GaryCook", 4.0));

cout « "Inital bag of " « students.GetItemsInContainerO t!^« " students:" « endl;

WriteStudents(students);

STUDENT *sp, s("DeanBrown");

if (students.HasMember(&s)) {

sp = students.Find(&s); »

students.Detach(sp); //Элемент удален. cout « "After removing " « s.GetIdO « " :" « endl;

WriteStudents(students) ;

} else

cout « s.GetIdO « " not found." « endl;

students.Flush(); // Уничтожает элементы. return 0;

}

void WriteStudents (STUDENT_BAG {.students) (

STUDENT_BAG_ITERATOR iterator(students) ;

STUDENT *s;

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

while (s = iterator++)

cout « " " « setw(20) « s->Get!d() « " " « s->GetGrade() « endl;

}

Двусторонняя очередь

Двусторонняя очередь — это очередь с двумя входами. Английский термин deque является сокращением от слов double-entry queue. В отличие от простой очереди, в двусторонней элементы могут быть вставлены и удалены с обеих сторон очереди. Двусторонняя очередь-контейнер может быть реализована с помощью одного из двух контейнеров FDS — вектора, либо двунаправленного списка. Для класса STUDENT из листинга 18.1, наиболее употребительными классами являются: