1. Napisati sablon funkcije za ucitavanje u liste proizvoljnog tipa podataka kao i za ispis liste proizvoljnog tipa. Lista se ucitava tako sto se najpre zada broj elemenata liste, a potom se u petlji ucitava redom svaki element i stavlja na kraj liste. 2. Napisati sablon klasu Par koja ima dva elementa proizvoljnih tipova. Redefenisati << operator za klasu Par tako da ispisuje u formatu "(a,b)". Nakon toga implementirati sablon funkciju koja prihvata dve liste proizvoljnih tipova i kao povratnu vrednost vraca listu objekata klase Par tako da je i-ti par u listi sacinjen od i-tog elementa prve i druge ulazne liste. 1 2 4 2 5 0 2.3 4 5.6 3.3 2.1 454.4 0 >(1,2.3) (2,4) (4,5.6) (2,3.3) (5,2.1) Probati nakon ovoga jos jednu primenu nad listom celih brojeva i listom dobijenih parova: >(1,(1,2.3)) (2,(2,4)) (4,(4,5.6)) ... 3. Napisati sablon funkciju koja menja prosledjenu listu proizvoljnog tipa menja tako sto zadrzava samo elemente koji ispunjavaju zadati unarni uslov. template void zadrzi( const list& niz, bool(*uslov)(T)); npr. zadrzi< int >(v1,u1) gde je v1 lista celih brojeva: 3 6 6 4 -32 5 32 a u1 definisan kao: bool u1(int x){ return x%2==0; } izmenjena kolekcija bi sadrzala samo parne elemente: 6 6 4 -32 32 4. Definisati sablonski funkcional pod nazivom Linear koji pri kreiranju prihvata dva argumenta a i b koji su realne vrednosti (float). Potom kreirati nekoliko takvih funkcionala sa razlicitim vrednostima i primeniti ih nad listom kroz funkciju zadrzi iz prethodnog zadatka. Operator () u funkcionalu je definisan tako da za unarni argument x racuna a*x+b>0: bool operator()(T x){ return (x*a+b)>0; } Funkcija zadrzi se mora malo prilagoditi kako bi radila sa funkcionalom: template void zadrzi( const list& niz, Uslov usl); Testirati nad tipovima za koje je dobro definisana operacija mnozenja i sabiranja sa tipom float.