Глава 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 функциональность контейнеров отделена от классов и встро-