Zaawansowane CPP/Ćwiczenia 12: Używanie funktorów: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 38: | Linia 38: | ||
{{cwiczenie|2|| | {{cwiczenie|2|| | ||
Zaimplementuj opisany na wykładzie adapter, który opakowuje funkcję lub funktor, ignorując zwracaną przez nie wartość i zwracający zamiast niej jakąś wartość wybranego typu. Np.: | Zaimplementuj opisany na wykładzie adapter, który opakowuje funkcję lub funktor, ignorując zwracaną przez nie wartość,, i zwracający zamiast niej jakąś wartość wybranego typu. Np.: | ||
double f(int); | double f(int); | ||
Linia 48: | Linia 48: | ||
adapt(f)(0); | adapt(f)(0); | ||
wywołuje <tt>f(0)</tt> i nie | wywołuje <tt>f(0)</tt> i nie zwraca żadnej wartości. | ||
}} | }} | ||
Linia 65: | Linia 65: | ||
result_type operator()(arg1_type a1,arg2_type a2) {_f(a1,a2);return | result_type operator()(arg1_type a1,arg2_type a2) {_f(a1,a2);return | ||
result_type(_val);}; | result_type(_val);}; | ||
}; | }; | ||
Do tego dochodzi jeszcze specjalizacja dla | Do tego dochodzi jeszcze specjalizacja dla <tt>Result <nowiki> =</nowiki> void</tt> i funkcje: | ||
template<typename R,typename F> adapt_t<F,R> | template<typename R,typename F> adapt_t<F,R> |
Wersja z 11:39, 25 wrz 2006
Ćwiczenie 1
Napisz algorytm for_each
który działałby na dwu zakresach.
template<typename InputIterator1, typename InputIterator2, typename BinaryFunction op> BinaryFunction for_each(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, BinaryFunction op);
Algorytm ma działać tak jak standardowy for_each
, tyle że funkcja
op
ma być stosowana do par elementów:
op(*first1,*first2); op(*(first1+1),*(first2+1); ...
Rozwiązanie
Ćwiczenie 2
Zaimplementuj opisany na wykładzie adapter, który opakowuje funkcję lub funktor, ignorując zwracaną przez nie wartość,, i zwracający zamiast niej jakąś wartość wybranego typu. Np.:
double f(int); adapt(f,7)(0);
wywołuje f(0) i zwraca 7.
double f(int); adapt(f)(0);
wywołuje f(0) i nie zwraca żadnej wartości.
Rozwiązanie
Ćwiczenie 3
Napisz iterator, który nic nie robi, ignorując przypisywane do niego elementy.
Rozwiązanie
Ćwiczenie 4
Zaimplementuj opisany w wykładzie iterator, który działa podaną funkcją na przypisywane obiekty.
Rozwiązanie