Il typedef serve per creare sinonimi di tipi di dato, e ciò è molto utile per la portabilità del tuo programma.
codice:
typedef std::list< adj_elem >::iterator adj_list_iterator;
Dichiara un sinonimo di std::list< adj_elem >::iterator sostituendolo con adj_list_iterator
In questo modo, se vuoi un oggetto di quel tipo, ti basterà fare
codice:
adj_list_iterator Prova;
invece di scrivere ogni volta
codice:
std::list< adj_elem >::iterator Ciao;
E cio è importante anche per la portabilità
Mettiamo caso hai un programma che utilizza vari adj_list_iterator.
Improvvisamente scopri che nel tuo programma serve std::list< adj_elem >::vector invece di std::list< adj_elem >::iterator ...
Se tu avessi scritto std::list< adj_elem >::iterator per ogni dichiarazione sarebbe un guaio sostituire tutto, ma e hai usato il typedef, ti basterà cambiare quello per avere un programma già nuovamente funzionante.