432 Часть III. Современное программирование на C++
ADT |
Бинарное дерево |
Хэш-таблица |
Список связей |
Двунаправленный список |
Вектор |
Массив |
|
|
|
|
Х |
Мультимножество |
|
|
|
|
Х |
Двусторонняя очередь |
|
|
|
Х |
Х |
Словарь |
|
|
Х |
|
|
Очередь |
|
|
|
|
Х |
Множество |
|
|
|
|
Х |
Стек |
|
|
Х |
|
Х |
Каждый класс ADT использует те классы FDS, которые подходят для контейнера данного типа. Бессмысленно реализовывать массив как хэш-таблицу. Выбор конкретной реализации — это всегда выбор между скоростью и гибкостью, т. е. возможностью легкой модификации. Двусторонняя очередь может быть реализована как двунаправленный список или как вектор. При этом двунаправленный список будет обеспечивать большую гибкость при изменении числа элементов, но при этом операции доступа будут медленнее.
Прямые и косвенные контейнеры
Контейнеры могут хранить объекты двумя способами: прямым (direct) и косвенным (indirect). Прямой контейнер хранит копию объекта. Объект studentList из листинга 18.2 сохраняет объекты, копируя их в контейнер.
Косвенные контейнеры хранят указатели на объекты. В листинге 18.3 код изменен так, чтобы хранить указатели на объекты.
ftinclude <iostream.h> ^include <ionianip. h> #include <classlib\arrays.h> ^include "studentl.h"
typedef TIArrayAsVector<STUDENT> STUDENT_LIST;
int main() (
STUDENT_LIST studentList(5, 0, 5) ;
string id;