Originariamente inviato da GliderKite
Essenzialmente cos'è un ADT lo puoi trovare spiegato qui:
Abstract Data Type
Personalizzato nel senso che te lo crei tu come meglio credi per la tua specifica applicazione (sarebbe meglio ottimizzare il codice per arrivare ad un buon connubio tra efficienza e possibilità di utilizzare lo stesso codice per diversi tipi di dato, cosa che spesso e volentieri non coincide, ma se utilizzi il C++ e non il C la cosa diventa parecchio più semplice).
Vedi, il metodo push_back dei vector alloca memoria automaticamente prima di riaggiungere la dimensione massima del vettore, in modo da permetterti di aggiungere elementi in coda. Questa operazione di re-allocazione spreca molte risorse ed è principalmente quest'operazione che rallenta il tutto.
Io non so esattamente cosa intendi fare, ma se fossi in te e dovessi memorizzare in un vettore una successione di numeri, ciascuno dei quali è compreso tra 0 e 90, di dimensione massima 2 milioni. Il modo più veloce che mi viene in mente di applicare è una cosa del tipo: pre-allocazione e successivo inserimento dei dati.
Esempio:
codice:
const size_t size = 0x1E8480;
try
{
char *vect = new char [ size ];
// Se new non lancia un'eccezione bad_alloc gestisci
// il vettore come devi
delete [] vect;
}
catch( bad_alloc & )
{
// Gestisci l'eccezione come credi
}
PS: volendo puoi sostituire char con int (maggior efficienza, più spazio occupato), ma ricordati sempre dei limiti di allocazione.