446_____________________Часть III. Современное программирование на C++
typedef TDequeA,sVector<STUDENT> STODENT_VDEQUE;
typedef TIDequeAsVector<STUDENT> STUDENT_POINTER_VDEQUE;
typedef TDequeAsDoubleList<STUDENT> STUDENT_DDEQUE ;
typedef TIDequeAsDoubleList<STUDENT> STUDENT_POINTER_DDEQUE;
Конструкторы двусторонних очередей, реализованные как векторы, могут принимать в качестве параметра размер очереди. Если параметр в конструктор не передается, создается двусторонняя очередь с размером по умолчанию равным DEFAULT_DEQUE_SIZE, который определяется в файле resource.h из каталога Include\Classlib. Этот параметр фиксирован и не может быть изменен. Двусторонняя очередь, содержащая 100 объектов типа STUDENT, определяется так:
STUDENT_VDEQUE studentDequel(100) ;
Двусторонние очереди, реализованные как двунаправленные списки, автоматически меняют размер, настраиваясь на любое количество элементов. Такая гибкость определяет их широкое использование. Конструктор для них не требует аргументов:
STUDENT_POINTER_DDEQUE studentDeque2 ;
Свойства фуНКЦИЙ-ЧЛенов Flush, GetItemsInContainer, ForEach, FirstThat И
LastThat совпадают с аналогичными функциями для массивов.
Вставка элементов в двустороннюю очередь выполняется функциями-членами PutLeft И PutRight:
studentDeque2.PutLeft(new STUDENT("ColetCooc", 3.9));
studentDeque2 . PutRight (new STUDENT ("JamesBartley" ,2.4));
Левый конец двусторонней очереди называется головой (head), а правый — хвостом (tail).
УдаЛЯЮТСЯ Элементы С ТОГО ИЛИ ИНОГО КОНЦа ФУНКЦИЯМИ GetLeft И GetRight.
Удаляемые элементы не уничтожаются, при этом для косвенного контейнера возвращается указатель на объект, а для прямого — копия объекта (передача по значению):
STUDENT *sl, *s2;
si = sstudentDequel.GetLeft();
s2 = studentDeque2.GetRight();
Доступ к элементам без удаления обеспечивают две функции-члена: peekLeft и peekRight. Если двусторонняя очередь — это прямой контейнер, возвращается ссылка на константу (constant reference), а косвенный — указатель:
const STUDENT sl = studentDequel.PeekLeft();
//возвращается константа STUDENTS STUDENT *s2 = studentDeque2.PeekRight();
//возвращается STUDENT*