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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Mirek (dyskusja | edycje)
Nie podano opisu zmian
Nie podano opisu zmian
 
Linia 33: Linia 33:
  }
  }


Kod znajduje się w pliku [http://osilek.mimuw.edu.pl/images/0/08/For_each.h for_each.h].
Kod znajduje się w pliku [[media:For_each.h | for_each.h]].
</div></div>
</div></div>


Linia 74: Linia 74:
  adapt(F f) {return adapt_t<F,void>(f);}
  adapt(F f) {return adapt_t<F,void>(f);}


Kod znajduje się w pliku [http://osilek.mimuw.edu.pl/images/4/45/Dev_null.h dev_null.h].
Kod znajduje się w pliku [[media:Dev_null.h | dev_null.h]].
</div></div>
</div></div>


Linia 90: Linia 90:


której operator przypisania "połyka" swój argument.
której operator przypisania "połyka" swój argument.
Kod znajduje się w pliku [http://osilek.mimuw.edu.pl/images/4/45/Dev_null.h dev_null.h].
Kod znajduje się w pliku [[media:Dev_null.h | dev_null.h]].
</div></div>
</div></div>


Linia 136: Linia 136:
korzystając z automatycznej dedukcji typów.
korzystając z automatycznej dedukcji typów.


Kod znajduje się w pliku [http://osilek.mimuw.edu.pl/images/1/10/Exec_iterator.h exec_iterator.h].
Kod znajduje się w pliku [[media:Exec_iterator.h | exec_iterator.h]].
</div></div>
</div></div>

Aktualna wersja na dzień 10:48, 2 paź 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