Questo può sembrare strano per alcuni di voi, ma quale dei seguenti 2 metodi di iterazione su un container STL è migliore? Perché?STL C++: quale metodo di iterazione su un contenitore STL è migliore?
class Elem;
typedef vector<Elem> ElemVec;
ElemVec elemVec;
// Method 0
for (ElemVec::iterator i = elemVec.begin(); i != elemVec.end(); ++i)
{
Elem& e = *i;
// Do something
}
// Method 1
for (int i = 0; i < elemVec.size(); ++i)
{
Elem& e = elemVec.at(i);
// Do something
}
Metodo 0 sembra STL detergente, ma Metodo 1 ottiene lo stesso con il codice minore. Semplice iterazione su un contenitore è ciò che appare all sul luogo in qualsiasi codice sorgente. Quindi, sono propenso a scegliere il Metodo 1 che sembra ridurre l'ingombro visivo e la dimensione del codice.
PS: So che gli iteratori possono fare molto più di un semplice indice. Ma ti preghiamo di mantenere la risposta/discussione incentrata sulla semplice iterazione su un contenitore come mostrato sopra.
Grazie Neil. Di solito il mio codice non funziona con i modelli ma con i vettori di cui è noto il tipo. Potresti approfondire il motivo per cui il metodo 0 è più efficiente nella tua risposta? –
Potrebbe essere leggermente più efficiente se l'iteratore viene effettivamente implementato direttamente come puntatore. Notare l'uso delle parole "può" e "leggermente" - è necessario misurare per essere sicuri. –
Sì, in effetti l'iteratore non è altro che un puntatore per la maggior parte dei contenitori. Ma come fa a rendere il codice più veloce? AFAIK anche il Metodo 1 finisce per essere l'aritmetica del puntatore, non è vero? –