Глава 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, наиболее употребительными классами являются: