Lezione 3
Lezione 3
Evoluzione della classe Vettore e uso di vector

In questa terza lezione affronteremo di nuovo gli stessi problemi della prima e seconda lezione (lettura di dati da un file, calcolo di media e mediana) utilizzando una evoluzione del contenitore di dati Vettore: possiamo rendere questa classe più flessibile in modo che sia capace di immagazzinare qualsiasi tipo di dato ( e non necessariamente dei numeri double ) ? Nella seconda parte spingeremo ancora oltre la generalizzazione imparando ad usare il contenitore vector della STL . Quindi in sintesi :
Per incominciare ripassiamo brevemente cosa sono le funzioni e le classi template.

Funzioni e classi template


ESERCIZIO 3.0 - Evoluzione della classe Vettore in una classe template (da consegnare):
Proviamo a rendere la classe Vettore della lezione scorsa una classe template in modo che possa in linea di principio immagazzinare oggeti di un tipo generico T. Notate che quando usiamo classi o funzioni template non applichiamo la separazione tra header file (.h) e file di implementazione (.cxx) ma codifichiamo tutto dentro l'header file. Questo perchè non sarebbe possibile per il compilatore compilare separatamente un set di funzioni o una classe senza sapere i tipi esatti con cui verranno utilizzati.

Vediamo come fare passo passo.

Generalizzazione classe Vettore:

Adeguamento funzioni:

Struttura del programma:

Commenti sulla compilazione :

ESERCIZIO 3.1 - Codice di analisi dati utilizzando la classe vector (da consegnare):

Vediamo passo passo come si può procedere.

Adeguamento funzioni:

Il codice principale:

Il makefile:

Notate che la classe vector ci libera completamente dalla necessità di conoscere in anticipo la quantità di dati da caricare. Questo ci permette per esempio di scrivere una funzione che legga automaticamente tutti i dati che trova in un file senza sapere a priori quanti sono.

Riempire un vettore da file

Per chi volesse approfondire le funzionalità della STL (facoltativo):


ESERCIZIO 3.2 - Analisi dati con vector e visualizzazione dei dati (da consegnare):
Proviamo ora ad aggiungere all'esercizio precedente la possibilità di visualizzare i dati letti da file.
Un modo semplice per visualizzare graficamente la distribuzione di un set di dati è quello di usare un istrogramma (TH1F) di ROOT. Le classi di ROOT sono molto comode da usare perchè possiamo facilmente utilizzarle in un codice C++ Per fare questo dobbiamo ricordarci di :

Per una rapida panoramica dei principali oggetti di ROOT che ci potranno interessare potete dare un'occhiata qui .

Vediamo come si potrebbe fare :

Programma principale:

Makefile modificato:
Back to Home Page