Zaawansowane CPP/Ćwiczenia 12: Używanie funktorów: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Rogoda (dyskusja | edycje)
Nie podano opisu zmian
Mirek (dyskusja | edycje)
Nie podano opisu zmian
Linia 21: Linia 21:
{{cwiczenie|2||
{{cwiczenie|2||


Zaimplementuj opisany na wykładzie adapter który
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.:
opakowywuje funkcję lub funktor, ignorując zwracaną przez nie wartość
i zwracający zamiast jakąś wartość wybranego typu. Napisać wersje dla
double f(int);
funkcji jedno i dwu argumentowychDo niego napisz iterator, który
adapt(f,7)(0);
nic nie robi, ignorując przypisywane do niego elementy.  
wywołuje <tt>f(0)</tt> i zwraca <tt>7</tt>.
 
double f(int);
adapt(f)(0);
   
wywołuje <tt>f(0)</tt> i nie wraca żadnej wartości.
}}
}}
{{cwiczenie|3||  
{{cwiczenie|3||  
Napisz iterator, który nic nie robi, ignorując przypisywane do niego elementy.
}}
{{cwiczenie|4||


Zaimplementuj opisany w wykładzie iterator, który działa podaną funkcją na
Zaimplementuj opisany w wykładzie iterator, który działa podaną funkcją na
przypisywane obiekty.
przypisywane obiekty.
}}
}}

Wersja z 11:17, 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);
...

Ć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 wraca żadnej wartości.

Ćwiczenie 3

Napisz iterator, który nic nie robi, ignorując przypisywane do niego elementy.

Ćwiczenie 4

Zaimplementuj opisany w wykładzie iterator, który działa podaną funkcją na przypisywane obiekty.