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

Void main()

{

list<int> L;

list<int>::iterator i;

int x;

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

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

L.push_back(mas[k]);

show("Початковий список", L);

L.push_front(1);

i = L.begin(); L.insert(++i, 2);

show("Після вставки 1 і 2 в початок", L);

i = L.end(); L.insert(--i, 100);

show("Після вставки 100 перед останнім", L);

i = L.begin();

x = *i;

L.pop_front();

cout <<"Видалили з початку " << x << endl;

i = L.end();

x = *--i; L.pop_back();

cout <<"Видалили з кінця " << x << endl;

show("Список після видалення", L);

L.remove(76);

show("Після видалення елементів із значенням 76",L);

L.sort();

show("Після сортування", L);

L.unique();

show("Після unique", L);

list<int> LI (L);

L.reverse();

show("Після reverse", L);

}

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

Початковий список:

56 34 54 0 76 23 51 11 51 11 76 88

Після вставки 1 ? 2 в початок:

1 2 56 34 54 0 76 23 51 11 51 11 76 88

Після вставки 100 перед останнім:

1 2 56 34 54 0 76 23 51 11 51 11 76 100 88

Видалили з початку 1

Видалили з кінця 88

Список після видалення:

2 56 34 54 0 76 23 51 11 51 11 76 100

Після видалення елементів із значенням 76:

2 56 34 54 0 23 51 11 51 11 100

Після сортування:

0 2 11 11 23 34 51 51 54 56 100

Після unique:

0 2 11 23 34 51 54 56 100

Після reverse:

100 56 54 51 34 23 11 2 0

10.2.4 Стеки (stack)

У стеку допускаються тільки ті операції, що змінюють його розмір –додавання елементу у вершину стека і вибірка з вершини. Стек можна реалізувати на основі будь-якого: вектора, двосторонньої черги або списку. Таким чином, стек є не новим типом контейнера, а варіантом який має місце, тому він називається адаптером контейнера. У STL стек визначений за умовчанням на базі двосторонньої черги:

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

class stack

{

protected:

Container c;

public:

explicit stack(const Containers = Container());

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

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

value_type& top() {return c.back();}

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

void push(const value_type& x) {c.push_back(x);}

void pop () {c.pop_back();}

};

З приведеного опису видно, що метод занесення в стек push() відповідає методу занесення в кінець push_back(), метод вибірки із стека pop() – методу вибірки з кінця рор_bаск(), крім того, доданий метод top() для отримання або зміни значення елементу на вершині стека. Конструктору класу stack передається в якості параметру посилання на базовий контейнер, який копіюється в захищене поле даних с.

Приклад використання стека:

#include <iostream>

#include <vector>

#include <stack>

using namespace std;

Void main()

{

int x;

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

stack <int, vector<int> > s;

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

s.push(mas[k]);

while (! s.empty())

{

x = s.top();

cout << x <<" ";

s.pop();

}

}

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

88 76 11 51 11 51 23 76 0 54 34 56

10.2.5 Черги (queue)

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

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

class queue

{

protected:

Container c:

public:

explicit queue(const Containers = Container());

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

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

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

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

value_type& back () (return c.back();}

const value_type& back () const (return c.back();}

void push(const value_type& x) (c.push_back(x);}

void pop() {c.pop_front();}

};

Методи front() і back() використовуються для набуття значень елементів, що знаходяться відповідно на початку і в кінці черги (при цьому елементи залишаються в черзі).

Приклад роботи з чергою (програма вводить дані в чергу і виконує вибірку з неї, поки черга не закінчиться):

#include <iostream>

#include <list>

#include <queue>

using namespace std;