Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MYлекция14.docx
Скачиваний:
9
Добавлен:
22.02.2015
Размер:
104.27 Кб
Скачать

Функциональные объекты

Класс, в котором определена операция вызова функции, называется функциональным. Объект функционального класса используется так, как если бы он был функцией. Функциональные объекты широко применяются в стандартной библиотеке С++. Чаще всего они используются в качестве параметров стандартных алгоритмов для задания пользовательских критериев сравнения объектов или способов их обработки.

Пример3для list

//ListChastota.cpp

#include <iostream>

#include <fstream>

#include <list>

#include <algorithm>

using namespace std;

//структура элемента списка

struct inf

{int num,q;};

//перегрузка операции <<

ostream& operator << (ostream& s, inf & x)

{s<<x.num<<" "<<x.q<<endl;

return s;}

// функциональный объект

class compare1

{public:

bool operator ()(inf a, inf b)const

{return a.num<b.num;

}

};

class compare2

{public:

bool operator ()(inf a, inf b)const

{return a.q<b.q;

}

};

Int main()

{ifstream fi("input.txt");

ofstream fo("output.txt");

compare1 u;

compare2 v;

list<inf> rez;

list<inf>::iterator it;

int k;

inf a;

while (fi>>k)

{it=rez.begin();

while(it!=rez.end() &&(*it).num!=k)

it++;

if(it!=rez.end())it->q++;

else {a.num=k;a.q=1; rez.push_back(a);}

}

fi.close();

for (it=rez.begin(); it!=rez.end(); it++)

fo<<*it<<" "; //Список до сортировки

fo<<endl;

//sort

rez.sort(u ); // сортировка с критерием u

for (it=rez.begin();it!=rez.end();it++)

fo<<*it< <” ”; //Список после сортировки

fo<<endl;

rez.sort(v); // сортировка с критерием v

for (it=rez.begin();it!=rez.end();it++)

fo<<*it<<” ”; //Список после сортировки частот

fo<<endl;

cout<<"end"<<endl;

fo.close();

return 0;

}

Input.Txt

5 1 3 5 2 1 5 6 3 2 2 7 5 3 5 7

output.txt

5 5

1 2

3 3

2 3

6 1

7 2

1 2

2 3

3 3

5 5

6 1

7 2

6 1

1 2

7 2

2 3

3 3

5 5

Адаптеры последовательных контейнеров

Это не новые типы контейнеров, а варианты имеющихся, их называют адаптерами контейнеров.

Стек – м.б. реализован на основе вектора, очереди или списка, в STL стек определён по умолчанию на базе двусторонней очереди. Метод занесения в стек – метод занесения в конец push_back, метод выборки – метод выборки из конца pop_back, добавлен метод top(). При работе со стеком нельзя пользоваться итераторами, нельзя получить значение элемента из середины стека, иначе , чем выбрав из стека все элементы, лежащие выше.

очередь - м.б. реализована на основе очереди или списка, в STL очередь определена по умолчанию на базе двусторонней очереди. Методы front и back используются для получения значений элементов, находящихся в начале и конце очереди (при этом элементы остаются в очереди)

очередь с приоритетами (priority_queue) м.б. реализована на основе очереди или вектора(они допускают произвольный доступ к элементам), в STL очередь определена по умолчанию на базе вектора. В очереди каждому элементу соответствует приоритет, определяющий порядок выборки из очереди. По умолчанию он определяется с помощью операции <, т.е. из очереди каждый раз выбирается максимальный элемент.

26

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