2. Templates
• Immaginate di dover scrivere una semplice
funzione :
f a , b=ab
Il modo in cui implementerete questa
funzione dipende dal TIPO delle variabili
coinvolte.
3. Templates
Scriviamo una funzione per i float:
float f(float a, float b){return a+b;}
Una per gli interi:
int f(int a, int b){return a+b;}
….. ecosi` via per ogni tipo di dato che
dobbiamo usare.
Il meccanismo di “OVERLOADING” in C++
permette di fare questo ma esiste un modo
molto piu' efficace.
4. Templates
• I Templates sono funzioni o classi ove il
TIPO di alcune variabili NON e' specificato
quando vengono definite ma solo quando
vengono usate in un codice. In questo caso
la funzione viene definita:
template <class B,class T >
B f(T a, T b) { return a+b ;}
• Nel main viene usata per esempio:
f<float,int>(a,b) // somma due interi ritorna un float
5. Templates
E` il compilatore che genera le diverse funzioni volute
per i diversi tipi che possono essere anche CLASSI.
L'unica cosa richiesta in questo caso e' che l'operatore
+ sia definito per i tipi richiesti. In alcuni casi lo puo' fare
anche partendo dalla lista delle variabili.
template <class T >
T f(T a, T b) { return a+b ;}
Nel main:
float a,b;
cout << f(a,b);
6. Templates
template <class T>
class mypair {
T a, b;
public:
mypair (T first, T second)
{a=first; b=second;}
T getmax ()
{
T retval;
retval = a>b? a : b;
return retval;}
};
7. STL
• STL significa: Standard Template Library
• E` una vasta libreria disponibile in ogni
sistema operativo e tutti i compilatori.
• NE STATE GIA` USANDO UNA PARTE:
#include <iostream>
fa parte delle STL nella sezione generale di
I/O & stream classes.
8. STL
• In questa lezione vedremo solo alcuni
esempi significativi rimandando ai testi e siti
di riferimento una trattazione piu' completa.
9. STL containers
• Tramite i containers possiamo strutturare i
dati. E' una operazione che già fate quando
riempite un vettore o una matrice di numeri.
• I principali tipi di containers che possiamo
usare sono:
• vector, deque, list, chiamati SEQUENZIALI
• set, multiset, map, chiamati ASSOCIATIVI
10. STL containers
• Il VECTOR e il DEQUE dono container
che possono dare a tipi generici di dati,
quindi anche oggetti, la struttura di un
vettore, ove ciascun elemento è accessibile
tramite un indice. Nel DEQUE gli elementi
possono essere aggiunti anche all'inizio.
• Una LIST è un container sequenziale ove
ciascun elemento ha puntatori al
precedente e al successivo.
11. STL containers
• Un set e un multiset sono container fatti in
modo che indipendentemente dal'ordine
con cui sono stati inseriti, gli elementi
vengono letti in modo ordinato.
• In una map si associa una chiave al
contenuto di ciascun elemento. In lettura
questi sono ordinati in base alla chiave.