|   | 
 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|  Menu  Distributions (131)  bootable [55]  commercial [7]  no-commercial [42]  unclassified [20]  [7]  Software  (10844) | 
 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Operátor | Odpovídající funktor | 
| + | plus | 
| - | minus | 
| * | multiplies | 
| / | divides | 
| % | modulus | 
| > | greater | 
| < | less | 
| >= | greater_equal | 
| <= | less_equal | 
| == | equal_to | 
| != | not_equal_to | 
| && | logical_and | 
| || | logical_or | 
| ! | logical_not | 
Všechny výše uvedené, předdefinované funktory, jsou přizpůsobivé. Pokud je objekt funktoru přizpůsobivý, znamená to, že obsahuje 
položky, které jsou vytvořené pomocí příkazu typedef. Mezi tyto položky patří first_argument_type, 
second_argument_type a result_type. Jinak řečeno, například návratovým typem objektu minus<double> 
 je minus<double>::result_type. Pro lepší pochopení opět uvedu jednoduchý příklad. 
Mějme vektor v1, jehož každý prvek chceme vynásobit číslem 3.14. K tomu budeme potřebovat opět verzi funkce transform, 
které mimo jiných parametrů musíme předat i unární funkci. Z předchozí tabulky už víme, že o násobení se postará funktor 
multiplies, nicméně jde o binární funkci, která se pro náš případ nehodí. Potřebujeme tedy tzv. funkční adaptér, 
který nám převede funktor se dvěma parametry na funktor, která má jeden parametr. K řešení tohoto problému se v C++ používají 
třídy binder1st a binder2nd. Na následujícím ukázce je kód, který vynásobí každý prvek vektoru 
číslem 3.14.
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
int main()
{
  const double pi = 3.14;
  const int N = 5;
  double myArray[N] = {1, 3, 5, 7, 9};
  
  vector<double> v1(myArray, myArray + 5);
  ostream_iterator<double> it(cout, " ");
  transform(v1.begin(), v1.end(), it, bind1st(multiplies<double>(), pi));
  return 0;
}
Třída binder1st obsahuje námi použitou funkci bind1st, díky níž jsme binární funkci multiplies 
převedli na unární funkci a mohli jsme ji potom použít na vyřešení našeho problému. Myslím, že již není nutné uvádět příklad na 
použítí bind2nd, neboť funguje analogicky funkci bind1st.
To by bylo k funktorům zhruba vše. Doufám, že jste jim porozuměli, neboť některé věci se na první pohled mohou jevit jako poněkud těžkopádné, přitom to není nic složitého a je dobré funktorům rozumět.
|  | ||
| KOMENTARZE Nie ma komentarzy dla tej pozycji. | ||
| 
   
    Tylko zarejestrowani użytkownicy mogą dopisywać komentarze.
   
  | ||
 Szukanie oprogramowania
	Szukanie oprogramowania
					| 1. | Pacman linux Download: 5539x | 
| 2. | FreeBSD Download: 9756x | 
| 3. | PCLinuxOS-2010 Download: 9247x | 
| 4. | alcolix Download: 11722x | 
| 5. | Onebase Linux Download: 10410x | 
| 6. | Novell Linux Desktop Download: 0x | 
| 7. | KateOS Download: 6911x | 
| 1. | xinetd Download: 3040x | 
| 2. | RDGS Download: 937x | 
| 3. | spkg Download: 5945x | 
| 4. | LinPacker Download: 11142x | 
| 5. | VFU File Manager Download: 3754x | 
| 6. | LeftHand Mała Księgowość Download: 7990x | 
| 7. | MISU pyFotoResize Download: 3466x | 
| 8. | Lefthand CRM Download: 4252x | 
| 9. | MetadataExtractor Download: 0x | 
| 10. | RCP100 Download: 3765x | 
| 11. | Predaj softveru Download: 0x | 
| 12. | MSH Free Autoresponder Download: 0x | 
 linuxsoft.cz | Design: 
					www.megadesign.cz
linuxsoft.cz | Design: 
					www.megadesign.cz