Confermo ciò che ti ha detto shodan: in particolare nel mio codice uso proprio Container che di volta in volta sono list, vector ecc..

Servono anche per rendere più leggibili certe dichiarazioni, ad esempio:
codice:
$ man signal
...
void (*signal(int sig, void (*func)(int)))(int);

or in the equivalent but easier to read typedef'd version:
typedef void (*sig_t) (int);
sig_t signal(int sig, sig_t func);
...
come vedi la prima senza typedef è praticamente illeggibile
;-)