Содержание
- 2. Розширення STL функціями користувача Передача функції через аргумент – стандартний механізм розширення функціональності бібліотеки Надійність механізму
- 3. Предикати Окрема категорія функцій, які передають у алгоритми для перевірки аргумента повертає bool результат залежить лише
- 4. Об'єкти-функції Об'єкти-функції – абстрактна категорія С++: все, що веде себе як функція, є функцією Крім виклику
- 5. Переваги об'єктів-функцій Можливості типу не обмежуються наявністю operator()(...), це може бути повноцінний тип С++ з додатковими
- 6. Accumulate (сума елементів послідовності) template T accumulate (In first, In last, T init) { while (first!=last)
- 7. Accumulate (сума елементів послідовності) void f(vector & vd, int* p, int n) { double sum =
- 8. Accumulate (узагальнення: обробка елементів послідовності) Цим алгоритмом можна не тільки сумувати елементи послідовності, а здійснювати над
- 9. Accumulate // перемноження елементів послідовності: #include void f(list & ld) { double product = accumulate(ld.begin(), ld.end(),
- 10. Accumulate (дані є частиною об’єкта) struct Tovar { int units; double unit_price; // … }; Для
- 11. class NewPrice { double zleva; public: NewPrice(double v):zleva(v){}; double operator()(double v,const Tovar& r){ return v +
- 12. Використання предикатів //предикат – функція // переміщення в b елементів не більших за 15 bool gt15(int
- 13. // предикат – функціональний об”єкт // переміщення в b елементів не більших за val class gt_n
- 14. стандартні об'єкти-функції Класифікація функціональних об”єктів бібліотеки STL здійснюється: за кількістю аргументів їх оператора operator( ) за
- 15. Шаблони базових типів стандартних об'єктів-функцій template struct unary_function {// base class for unary functions typedef _Arg
- 16. Всі визначені в бібліотеці функціональні об’єкти є шаблонними типами і представляють всі вбудовані знаки арифметичних операцій,
- 17. Стандартні об'єкти-функції
- 18. negate template struct negate : public unary_function {// functor for unary operator- _Ty operator()(const _Ty& _Left)const
- 19. plus template struct plus :public binary_function {// functor for operator+ _Ty operator()(const _Ty& _Left, const _Ty&
- 20. logical_or template struct logical_or :public binary_function {// functor for operator|| bool operator()(const _Ty& _Left, const _Ty&
- 21. Використання стандартних об”єктів-функцій // копіює елементи послідовності [first, last) у result, попередньо застосувавши до кожного елемента
- 22. Vector sklad1, sklad2; // зaповнення товаром sklad1, sklad2; transform(sklad1.begin(), sklad1.end(), sklad2.begin(), sklad1, minus ()); // для
- 23. Адаптери об'єктів-функцій Як використати бінарний функціональний об”єкт divides для ділення вектора на число? Як використати предикат
- 24. Адаптери стандартних об'єктів-функції
- 25. Адаптери binder1st і binder2nd Класи-адптери binder1st і binder2nd, конвертують адаптовані бінарні функції в адаптовані унарні функції,
- 26. class binder2nd template // functor adapter _Func(left, stored) class binder2nd : public unary_function typename _Fn2::result_type>{ public:
- 27. class binder2nd-2 template class binder2nd : public unary_function .... binder2nd(const _Fn2& _Func, const typename _Fn2::second_argument_type& _Right)
- 28. bind2nd() template inline binder2nd bind2nd(const Fn2& func, const T& right) {// return a binder2nd functor adapter
- 29. class binder1st template class binder1st: public unary_function { // functor adapter _Func(stored, right) public: typedef unary_function
- 30. class binder1st-2 template class binder1st : public unary_function . . . binder1st(const _Fn2& _Func, const typename
- 31. Використання адаптерів vector v1(4,4); ostream_iterator out(cout," "); transform(v1.begin(), v1.end(), out, bind2nd(divides (), 2)); // 2 2
- 32. Крім бібліотечних функціональних об”єктів можна конвертувати з допомогою алаптерів й функціональні об’єкти, створені користувачем. Для цього
- 33. class unary_negate //Шаблонний клас забезпечує функцію, яка заперечує значення, яке повертає унарна функція template class unary_negate
- 34. not1() template inline unary_negate not1(const Fn1& func) { // return a unary_negate functor adapter return std::unary_negate
- 35. class binary_negate template class binary_negate: public binary_function typename Fn2::second_argument_type, bool> { public: explicit binary_negate(const Fn2& func):
- 36. not2() template inline binary_negate not2(const Fn2& func) { return std::binary_negate (func); }
- 37. class pointer_to_unary_function //адаптер отримує вказівник на функцію і перетворює її (повертає) у функціональний об’єкт. Працює лише
- 38. ptr_fun() template inline pointer_to_unary_function Result (__cdecl *)(Arg)> ptr_fun( Result(__cdecl * left)(Arg) ){ // return pointer_to_unary_function functor
- 39. ptr_fun()-2 template class Result> inline pointer_to_binary_function ptr_fun ( Result(__cdecl * left)(Arg1, Arg2) ){ // return pointer_to_binary_function
- 40. int d[ ] = { 123, 94, 10, 314, 315 }; bool isEven(int x) { return
- 41. double d[] = { 01.23, 91.370, 56.661,023.230, 19.959, 1.0, 3.14159 }; int main() { vector vd;
- 42. Адаптери mem_fun()та mem_fun_ref_t Адаптер mem_fun( ) утворює функціональний об”єкт, який викликається, використовуючи вказівник на об”єкт, для
- 43. class mem_fun_t template class mem_fun_t : public unary_function { // functor adapter (*p->*pfunc)(), non-const public: explicit
- 44. mem_fun() template inline mem_fun_t mem_fun(Result (T::* pm)()) { // return a mem_fun_t functor adapter return mem_fun_t
- 45. class Shape { public: virtual void draw() = 0; virtual ~Shape() {} }; class Circle :
- 46. class mem_fun_ref_t template class mem_fun_ref_t : public unary_function { // functor adapter (*left.*pfunc)(), non-const *pfunc public:
- 47. mem_fun_ref() template inline mem_fun_ref_t mem_fun_ref(Result (T::* pm)()) { // return a mem_fun_ref_t functor adapter return mem_fun_ref_t
- 48. class Angle { int degrees; public: Angle(int deg) : degrees(deg) {} int mul(int times) { return
- 49. mem_fun1_t template class mem_fun1_t : public binary_function { // functor adapter (*p->*pfunc)(val), non-const *pfunc public: explicit
- 51. Скачать презентацию