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<typename T> void zadrzi( const list<T>& 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<typename T,typename Uslov> void zadrzi( const list<T>& niz, Uslov usl);

Testirati nad tipovima za koje je dobro definisana operacija mnozenja i sabiranja sa tipom float. 

 
