SlideShare ist ein Scribd-Unternehmen logo
1 von 13
Downloaden Sie, um offline zu lesen
C++ Templates & STL
     Bologna, 1/12/2011
Templates
• Immaginate di dover scrivere una semplice
  funzione :
              f a , b=ab

Il modo in cui implementerete questa
funzione dipende dal TIPO delle variabili
coinvolte.
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.
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
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);
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;}
};
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 Levi
Dipartimento di Fisica
 www.giuseppelevi.it

     www.unibo.it

Weitere ähnliche Inhalte

Ähnlich wie Template

Lezione 10 (21 marzo 2012)2
Lezione 10 (21 marzo 2012)2Lezione 10 (21 marzo 2012)2
Lezione 10 (21 marzo 2012)2STELITANO
 
Introduzione a JavaScript
Introduzione a JavaScriptIntroduzione a JavaScript
Introduzione a JavaScriptGiovanni Buffa
 
Programmazione funzionale e Stream in Java
Programmazione funzionale e Stream in JavaProgrammazione funzionale e Stream in Java
Programmazione funzionale e Stream in JavaCristina Attori
 
lezione1.pdf
lezione1.pdflezione1.pdf
lezione1.pdfdttdigi
 
Object Oriented with Java Programmazione Base
Object Oriented with Java Programmazione BaseObject Oriented with Java Programmazione Base
Object Oriented with Java Programmazione BaseFelice Pescatore
 
Linked data parliamo di semantica del web - v3
Linked data   parliamo di semantica del web - v3Linked data   parliamo di semantica del web - v3
Linked data parliamo di semantica del web - v3Riccardo Grosso
 
Open web programming
Open web programmingOpen web programming
Open web programmingnois3lab
 
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...Massimo Cenci
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)STELITANO
 
Strutture dati 04-funzionicustom-classioggetti
Strutture dati 04-funzionicustom-classioggettiStrutture dati 04-funzionicustom-classioggetti
Strutture dati 04-funzionicustom-classioggettiStudiabo
 

Ähnlich wie Template (20)

Lezione 10 (21 marzo 2012)2
Lezione 10 (21 marzo 2012)2Lezione 10 (21 marzo 2012)2
Lezione 10 (21 marzo 2012)2
 
Introduzione a JavaScript
Introduzione a JavaScriptIntroduzione a JavaScript
Introduzione a JavaScript
 
Dispensa di PL-SQL
Dispensa di PL-SQLDispensa di PL-SQL
Dispensa di PL-SQL
 
06 3 struct
06 3 struct06 3 struct
06 3 struct
 
What's new in C# 7
What's new in C# 7What's new in C# 7
What's new in C# 7
 
Programmazione funzionale e Stream in Java
Programmazione funzionale e Stream in JavaProgrammazione funzionale e Stream in Java
Programmazione funzionale e Stream in Java
 
Corso Java
Corso JavaCorso Java
Corso Java
 
Inferno Limbo Italian
Inferno Limbo ItalianInferno Limbo Italian
Inferno Limbo Italian
 
06 2 vector_matrici
06 2 vector_matrici06 2 vector_matrici
06 2 vector_matrici
 
lezione1.pdf
lezione1.pdflezione1.pdf
lezione1.pdf
 
Oracle PL sql 1
Oracle PL sql 1Oracle PL sql 1
Oracle PL sql 1
 
Object Oriented with Java Programmazione Base
Object Oriented with Java Programmazione BaseObject Oriented with Java Programmazione Base
Object Oriented with Java Programmazione Base
 
Pe t4 perl-oggetti
Pe t4 perl-oggettiPe t4 perl-oggetti
Pe t4 perl-oggetti
 
Linked data parliamo di semantica del web - v3
Linked data   parliamo di semantica del web - v3Linked data   parliamo di semantica del web - v3
Linked data parliamo di semantica del web - v3
 
OOP with C#
OOP with C#OOP with C#
OOP with C#
 
Open web programming
Open web programmingOpen web programming
Open web programming
 
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...
Note di Data Warehouse e Business Intelligence - Tecniche di Naming Conventio...
 
Riepilogo Java C/C++
Riepilogo Java C/C++Riepilogo Java C/C++
Riepilogo Java C/C++
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)
 
Strutture dati 04-funzionicustom-classioggetti
Strutture dati 04-funzionicustom-classioggettiStrutture dati 04-funzionicustom-classioggetti
Strutture dati 04-funzionicustom-classioggetti
 

Template

  • 1. C++ Templates & STL Bologna, 1/12/2011
  • 2. Templates • Immaginate di dover scrivere una semplice funzione : f a , b=ab 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.
  • 12. STL • Oltre a ciò: – Algoritmi ( for_each, search, sort, insert....) – Container speciali ( code, stacks....) – Stringhe – Template Numerici ( complex, valarray ) http://www.cplusplus.com/reference/
  • 13. Giuseppe Levi Dipartimento di Fisica www.giuseppelevi.it www.unibo.it