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*