1. Funktor fogalma

Bármi, aminek van függvényhívás operátora. C-ből csak a függvénypointer ilyen, de amióta tudjuk overload-olni a függvényhívás operátort, bármilyen típus lehet az. A bármilyen típus tehát template paramétert jelent, ha át akarjuk venni függvényben.

További fogalmak:

  • predikátum
  • unáris predikátum
  • bináris predikátum, avagy komparátor

2. Titkosító függvény

a) Írjunk függvényt, ami egy sztringet tud karakterenként transzformálni az átvett (bármilyen típusú) funktorral!

std::string s = "Hello!";
transform_string(s, std::tolower);

b) Írjunk olyan funktor osztályt, ami Caesar-féle kódolást valósít meg a -> b elven. (Egyébként Caesar idején a -> d volt a kulcs, Augustus idején pedig a -> b.)

c) Írjunk funktor osztályt, ami tetszőleges eltolású Caesar-kódolást végez: 'a' -> 'a' + n.

d) Olyan funktor, ami round-robin elven működik: az első karaktert 1-gyel, a következőt 2-vel, stb. tolja el.

Megoldás

3. std::count_if tömbön, egy régebbi ZH feladat

a) Készítsen generikus algoritmust (Count), ami megszámlálja egy paraméterként kapott indexelhető objektum azon elemeit, amelyek megfelelnek a predikátummal megadott feltételnek! A predikátum legyen megadható funktorral is!

b) Készítsen olyan függvényt, ami predikátumként alkalmazható és képes eldönteni, hogy egy Idopont nagyobb-e, mint 14 óra! Tételezze fel, hogy az 1b) feladatban elkészült Idopont osztály tökéletesen működik, beolvasható, kiírható, valamint vannak relációs operátorai is!

c) Írjon kódrészletet, melyben beolvas maximum 140 db időpontot a 2. feladatban elkészített tárolóba, majd az a) feladatrészben elkészített függvénysablon és a b) feladatrészben elkészített predikátum segítségével kiírja, hogy a beolvasott időpontok közül hány darab nagyobb, mint 14 óra!

d) Írjon kódrészletet, melyben beolvas maximum 100 egész számot egy tömbbe, majd az a) feladatrészben elkészített függvénysablon segítségével kiírja, hogy a beolvasott számok közül hány szám páros!

4. std::count_if iterátorral

Alakítsuk át az előző Count függvényt, hogy bármilyen iterátorral adott tartományon tudjon dolgozni!

Megoldás