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.
In questi momenti mi rendo conto di essere ancora proprio agli inizi... :-| della programmazione in c++

Riferendomi al tuo intervento ad esempio ho capito solo... che con il metodo push_back() rallenta notevolmente il tutto rispetto ad altri modi come quello da te indicato ma che nn riesco a capire come funziona...

const size_t size = 0x1E8480 cosa significa?

In particolare volessi aggiungere al vettore vect il valore ritardo di volta in volta differente (da 0 a 200) come devo fare nel tuo caso? Infine perchè lo devo "svuotare"... con delete [] vect; ???

Grazie mille e scusa la mia illimitata ignoranza.. in questo campo!