template
DESCRIPTION
tTRANSCRIPT
C++ Templates & STLBologna, 1/12/2011
Templates• Immaginate di dover scrivere una semplice
funzione :
Il modo in cui implementerete questa funzione dipende dal TIPO delle variabili coinvolte.
f a ,b=ab
TemplatesScriviamo 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;}
….. e cosi` 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.
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
TemplatesE` 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);
Templatestemplate <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;}};
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.
STL• In questa lezione vedremo solo alcuni
esempi significativi rimandando ai testi e siti di riferimento una trattazione piu' completa.
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
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.
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.
STL • Oltre a ciò:
– Algoritmi ( for_each, search, sort, insert....)– Container speciali ( code, stacks....)– Stringhe– Template Numerici ( complex, valarray )
http://www.cplusplus.com/reference/
Giuseppe LeviDipartimento di Fisicawww.giuseppelevi.it
www.unibo.it