Иллюстрированный самоучитель по Visual Studio.Net



     википедия светлана рерих |          

Последовательности типа deque


Контейнер типа deque (очередь с двумя концами) похож на vector в том смысле, что допускает выбор элемента по индексу и делает это быстро. Отличие состоит в том, что он умеет эффективно вставлять новые элементы как в конец, так и в начало последовательности. Deque не имеет некоторых методов, которые имеет vector, например capacity и reserve. Вместо этого он имеет методы, которых нет у вектора, например push_f ront, pop_back и pop_f ront. Далее мы будем исследовать возможности различных контейнеров, и каждый новый контейнер требует подключения своего файла заголовков. В данный момент не забудьте вставить директиву препроцессора tinclude <deque>:

void main ()

{

deque<double> d;

d.push_back(0.5) ;

d.push_back(l.);

d.push_front(-1.);

pr(d,"double Deque");

//======== Ссылки на два крайних элемента

deque<double>::reference

rf = d.front(),

rb = d.back();

//======== Присвоение с помощью ссылок

rf = 100.;

rb = 100.;

pr(d,"After using reference");

//======== Поиск с помощью связывателя

deque<double>::iterator p = find_if(d.begin(), d.end(),

bind2nd(less<double>(),100.));

//======== Вставка в позицию перед позицией,

//======== на которую указывает итератор

d.insert(p,-1.);

pr(d,"After find_if and insert");

//======== Второй контейнер

deque<double> dd(2,-100.);

//======== Вставка диапазона значений

d.insert (d.begin ()+1, dd.begin(), dd.end());

pr(d,"After inserting another deque");

cout«"\n\n";

}

Следующий фрагмент демонстрирует, как можно копировать контейнеры (сору) и обменивать данные между ними (swap). Шаблон функций find позволяет найти объект в любой последовательности. Он откажется работать, если в классе объектов не определена операция operator== (). Отметьте также, что после вставки или удаления элемента в контейнер типа deque все итераторы становятся непригодными к использованию (invalid), так как произошло перераспределение памяти. Однако удаление с помощью pop_back или pop_f ront портит только те итераторы, которые показывали на удаленный элемент, остальные можно использовать.


Содержание  Назад  Вперед