Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lucik_op.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
2.88 Mб
Скачать

Контейнер последовательностей deque

Класс deque объединяет многие возможности классов vector и list. Этот класс представляет собой двунаправленную очередь. В классе deque реализован механизм эффективного индексного доступа (подобно тому, как и в классе vector).

Класс deque реализован для эффективных операций вставки в начало и конец. Класс deque обеспечивает поддержку итераторов прямого доступа, что дает возможность использовать при работе с ним любых алгоритмов STL.

Класс deque имеет базовые функции, аналогичные классу vector, при этом в класс deque добавлены компоненты-функции push_front и pop_front.

#include <iostream>

using std::cout;

using std::endl;

#include <deque>

#include <algorithm>

template<class T>

void PrintDeque(const std::deque<T> &dq);

#define SIZE 6

main()

{ std::deque<float> d,dd(3,1.5);

PrintDeque(dd);

d.push_back(2);

d.push_front(5);

d.push_back(7);

d.push_front(9);

d[4]=3; // изменить значение 5-го элемента на 3

d.at(3)=6;

try{ d.at(5)=0;

}

catch(std::out_of_range e){

cout<<"Исключение : "<<e.what();

}

PrintDeque(d);

d.erase(d.begin() + 2); // удаление 3-го элемента

PrintDeque(d);

d.insert(d.begin() + 3,7);// добавление 7 после 3-го элемента вектора

PrintDeque(d);

d.insert(d.end()-1,2,1.6);

PrintDeque(d);

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

PrintDeque(d);

std::sort(d.begin(),d.end());

PrintDeque(d);

d.swap(dd); // замена массивов v и vv

PrintDeque(d);

PrintDeque(dd);

dd.erase(dd.begin(),dd.end()); //удаление всех элементов dd

PrintDeque(dd);

d.clear(); // чистка всего вектора

PrintDeque(d);

return 0;

}

template<class T>

void PrintDeque(const std::deque<T> &dq)

{ std::deque<T>::const_iterator pt;

if (dq.empty())

{ cout << "Deque is empty " << endl;

return;

}

cout<<"DEQUE :"

<<" размер = "<<dq.size()<<endl;

cout<<" содержимое = ";

for(pt=dq.begin();pt!=dq.end();pt++)

cout<<*pt<<' ';

cout<<endl;

}

Результат работы программы:

DEQUE : размер = 3 содержимое =1.5 1.5 1.5

Исключение : invalid deque<T> subscript

DEQUE : размер = 4 содержимое =9 5 2 6

DEQUE : размер = 3 содержимое =9 5 6

DEQUE : размер = 4 содержимое =9 5 6 7

DEQUE : размер = 6 содержимое =9 5 6 1.6 1.6 7

DEQUE : размер = 9 содержимое =9 5 6 1.6 1.6 7 1.5 1.5 1.5

DEQUE : размер = 9 содержимое =1.5 1.5 1.5 1.6 1.6 5 6 7 9

DEQUE : размер = 3 содержимое =1.5 1.5 1.5

DEQUE : размер = 9 содержимое =1.5 1.5 1.5 1.6 1.6 5 6 7 9

Deque is empty

Deque is empty

В приведенном примере использованы все ранее рассмотренные функции классов vector и list, также являющиеся компонентами класса deque. В программе были использованы все три версии функции insert:

iterator insert(iterator it, const T& x = T());

void insert(iterator it, size_type n, const T& x);

void insert(iterator it, const_iterator first, const_iterator last);

Первая версия функции предназначена для вставки после элемента, на который указывает итератор, значения, соответствующего второму параметру. Вторая версия вставляет n значений, равных третьему параметру. Наконец, третья версия вставляет значения из интервала от второго аргумента (итератора) до третьего.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]