template

13
C++ Templates & STL Bologna, 1/12/2011

Upload: giuseppe-levi

Post on 26-May-2015

2.602 views

Category:

Education


3 download

DESCRIPTION

t

TRANSCRIPT

Page 1: Template

C++ Templates & STLBologna, 1/12/2011

Page 2: Template

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

Page 3: Template

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.

Page 4: Template

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

Page 5: Template

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);

Page 6: Template

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;}};

Page 7: Template

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.

Page 8: Template

STL• In questa lezione vedremo solo alcuni

esempi significativi rimandando ai testi e siti di riferimento una trattazione piu' completa.

Page 9: Template

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

Page 10: Template

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.

Page 11: Template

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.

Page 12: Template

STL • Oltre a ciò:

– Algoritmi ( for_each, search, sort, insert....)– Container speciali ( code, stacks....)– Stringhe– Template Numerici ( complex, valarray )

http://www.cplusplus.com/reference/

Page 13: Template

Giuseppe LeviDipartimento di Fisicawww.giuseppelevi.it

www.unibo.it