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

Void main()

{

queue <int, list<int> > q;

int x;

int mas[12] = {56,34,54,0,76,23,51,11,51,11,76,88};

for(int k = 0; k < 12; k++)

q.push(mas[k]);

cout <<"q.front():" << q.front()<< " ";

cout <<"q.back(): " << q.back() << endl;

while (1)

{

q.pop();

if (q.empty())break;

cout <<"q.front():" << q.front() <<" ";

cout <<"q.back(): "<< q.back()<< endl;

}

}

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

q.front(): 56 q.back(): 88

q.front(): 34 q.back(): 88

q.front(): 54 q.back(): 88

q.front(): 0 q.back(): 88

q.front(): 76 q.back(): 88

q.front(): 23 q.back(): 88

q.front(): 51 q.back(): 88

q.front(): 11 q.back(): 88

q.front(): 51 q.back(): 88

q.front(): 11 q.back(): 88

q.front(): 76 q.back(): 88

q.front(): 88 q.back(): 88

Як вже наголошувалося у послідовних контейнерів багато загального. Нижче наводиться приклад, в якому для заповнення контейнерів даними використовується один і той же метод puch_back(), виведення даних з контейнера виконується за допомогою ітератора. Проте виведення даних з контейнера для вектора і черги можливе за допомогою довільного доступу до елементу, а для списку це неприпустимо.

Приведемо приклад.

#include <iostream>

#include <vector>

#include <deque>

#include <list>

using namespace std;

Void main()

{

int mas[] = {1,2,3,4,5,6,7,8,9};

int i;

vector <int> vec;

vector<int>::iterator t;

deque<int>::iterator d;

deque <int> dec;

list<int>::iterator l;

list<int> list;

// ------------ vector ----------------------

cout << endl <<" vector " <<endl;

for (i = 0; i < 9; i++)vec.push_back(mas[i]);

for (i = 0,t = vec.begin();t != vec.end();t++,i++)

cout <<" "<<*t <<"/"<< vec[i];

cout <<"\n";

t = vec.begin();

for (i = 0;i < vec.size();i++)

cout <<" "<<vec[i]<<"/" << *(t++);

t = (vec.begin() + 1);

*t = 100;

cout << endl << " "<<vec[0]<<" " << *t ;

vector<int>::iterator tt;

tt = t;

tt= t + 2;

cout <<"\n "<<*(tt)<<" "<<"\n";

// ------------ deque ----------------------

cout << endl <<" deque " <<endl;

for (i = 0; i < 9; i++)

dec.push_back(mas[i]);

for (i = 0,d = dec.begin();d != dec.end();d++,i++)

cout <<" "<<dec[i]<<" "<<*d;

// ------------ list -----------------------

cout << endl <<" list " <<endl;

for (i = 0; i < 9; i++)

list.push_back(mas[i]);

for (l = list.begin();l != list.end();l++)

cout <<" "<<*l ;

}

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

vector

1/1 2/2 3/3 4/4 5/5 6/6 7/7 8/8 9/9

1/1 2/2 3/3 4/4 5/5 6/6 7/7 8/8 9/9

1 100

4

deque

1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9

list

1 2 3 4 5 6 7 8 9

10.2.6 Черги з пріоритетами (priority_queue)

У черзі з пріоритетами кожному елементу відповідає пріоритет, що визначає порядок вибірки з черги. За умовчанням він визначається за допомогою операції <; таким чином, з черги кожного разу вибирається максимальний елемент.

Для реалізації черги з пріоритетами підходить контейнер, що допускає довільний доступ до елементів, тобто, наприклад, вектор або двостороння черга. Тип контейнера передається другим параметром шаблону (перший, як завжди, тип елементів). Третім параметром вказується функція або функціональний об'єкт, за допомогою яких виконується визначення пріоритету:

template <class Т, class Container = vector<T>,

class Compare =less<typename Container::value_type> >

class priority_queue

{

protected:

Container c;

Compare comp;

public:

explicit priority_queue(const Compare& x= Compare(),

const Container& = Container());

template <class InputIter>

priority_queue(lnputlter first, Inputlter last,

const Compare&x=Compare(),const Container&=Container());

bool empty () const {return c.empty();}

size_typesize() const {return c.size();}

const value_type& top() const {return c.front();}

void push(const value_type& x);

void pop();

};

Для елементів з рівними пріоритетами черга з пріоритетами є простою чергою. Як і для стеків, основними методами є push(), pop() і top().

Приклад:

#include <iostream>

#include <queue>

using namespace std;