Domanda

Ho un vettore di myObjects in ambito globale.

std::vector<myObject>

A un metodo viene passato un puntatore a uno degli elementi nel vettore. Questo metodo può aumentare il puntatore, per arrivare all'elemento successivo,

myObject* pmObj;

++pmObj; // the next element ??

o dovrebbe essere passato un std :: Vector < myObject > :: iterator e incrementarlo invece?

Supponiamo per ora che il vettore non verrà modificato nel frattempo.

È stato utile?

Soluzione

Sì - lo standard garantisce in una correzione tecnica che l'archiviazione per un vettore è contigua, quindi funzionerà incrementando i puntatori in un vettore.

Altri suggerimenti

Sì, funzionerà come previsto poiché std :: vector è obbligato a utilizzare lo spazio di archiviazione contiguo secondo lo standard. Suggerirei di passare un paio di iteratori se stai lavorando con una gamma di oggetti. Questo è praticamente il linguaggio standard utilizzato dalla STL. Questo renderà anche il tuo codice un po 'più sicuro poiché hai un endpoint esplicito per l'iterazione invece di fare affidamento su un conteggio o qualcosa del genere.

Se il vettore non è riallocato e si è sicuri di non uscire dai limiti del vettore, è possibile utilizzare questo approccio. Incrementare i puntatori è legale e mentre hai spazio per passare all'elemento successivo puoi farlo incrementando il puntatore poiché il buffer del vettore è un singolo blocco di memoria.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top