Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

polevoy_cpp_2012_spring_lecture_12

.pdf
Скачиваний:
9
Добавлен:
20.04.2015
Размер:
203.05 Кб
Скачать

Пример (qsort)

//pData – массив структур SBook

//num – число элементов в массиве

int (*pCmp)(const void*, const void*)(cmpByYear);

qsort(pData, num, sizeof(*pData), pCmp);

28.04.2012

cppNewb.ru

41

Пример (qsort)

int cmpByYear(const void* pL, const void* pR)

{

assert((0 != pL) && (0 != pR));

SBook& lhs(*reinterpret_cast<SBook*>(pL)); SBook& rhs(*reinterpret_cast<SBook*>(pR)); return (rhs.m_year - lhs.m_year);

}

28.04.2012

cppNewb.ru

42

Проблемы call-back функций

нет контроля типов

накладные на вызовы функций

глобальные данные

28.04.2012

cppNewb.ru

43

Стандартные алгоритмы

шаблонные функции, параметризуются через

итераторы

функторы

если тип итераторов контейнера не соответствует типу итераторов алгоритма, поищите метод контейнера

28.04.2012

cppNewb.ru

44

std::find (пример алгоритма)

template<class InputIt, class T> InputIt find(InputIt first,

InputIt last, const T& value)

{

for(;first != last; ++first) if (*first == value)

break; return first;

}

28.04.2012

cppNewb.ru

45

std::sort (варианты функции)

• для контейнеров с произвольным доступом

template<class RandAccIt> void sort(RandAccIt first,

RandAccIt last)

template<class RandAccIt, class Compare>

void sort(RandAccIt first, RandAccIt last, Compare comp)

28.04.2012

cppNewb.ru

46

std::sort (варианты функции)

• для списка

void list::sort()

template <class Compare>

void list::sort(Compare comp)

28.04.2012

cppNewb.ru

47

Функтор (функциональный объект)

экземпляр любого класса, перегружающего operator()

используется для параметризации

алгоритмов

может встраиваться компилятором в тело алгоритма (в отличии от обычной

функции)

28.04.2012

cppNewb.ru

48

Функтор (функциональный объект)

может содержать данные

может копироваться в процессе работы

алгоритма

для некоторых алгоритмов не должен иметь изменяемого состояния

28.04.2012

cppNewb.ru

49

Свойства функторов

(traits)

информация о типах аргументов и результата

используются в шаблонном коде

28.04.2012

cppNewb.ru

50

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