Глава 18. Классы-контейнеры_________________________________459
// Прямой двунаправленный список typedef TDoubleListImp<STUDENT> STUDENT_LIST;
// Итератор BIDS
typedef TDoubleListIteratorImp<STUDENT> STUDENT_LIST_ITERATOR;
// Размещение элементов в контейнере void WriteStudents(STUDENT_LIST&) ;
int main() {
STUDENT_LIST students;
students-Add(STUDENT("Cindy Smith", 1.5));
students.AddAtHead(STUDENT("Andy Brown", 4.0));
students.Add(STUDENT("Barry Jones", 3.0));
students.AddAtTail(STUDENT("Dina Carlson", 3.5));
cout « "В голове списка студент " « students.PeekHead()-GetidО « endl;
cout « "В хвосте списка студент " « students.PeekTail()-Getldf) « endl;
cout « "Двунаправленный список из " 'Ь« students.GetItemsInContainer() « " студентов:" « endl;
WriteStudents(students);
students.Flush(); // Уничтожение элементов. return 0;
)
void WriteStudents(STUDENT_LIST sstudents) {
STUDENT_LIST_ITERATOR iterator(students) ;
cout « setiosflags(ios::fixed I ios::left) « setprecision(l);
cout « " Листание списка от головы к хвосту:" « endl;
while (iterator) {
cout « " " « iterator.Current().Getid() t^« n " <;< iterator. Current () .GetGradeO « endl;
++iterator;
} --iterator;
cout « " Листание списка от хвоста к голове:" « endl;
while (iterator) {
cout « " " « iterator.Current().Get Id() Ч>« " " « iterator.Current().GetGrade() « endl;
--iterator;
} )
STL
Построение библиотеки STL существенно отличается от BIDS. В BIDS функциональность контейнеров встраивается в класс с помощью функций-членов. В STL функциональность контейнеров отделена от классов и встро-