nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

Re: Modificare un vettore durante l'iterazione della stessa.

Von: Gabriele Greco (gabrielegreco@removeuppercasetomailtin.it) [Profil]
Datum: 18.01.2008 10:18
Message-ID: <L9_jj.54698$8j3.36757@tornado.fastwebnet.it>
Newsgroup: it.comp.giochi.sviluppo
St4lk3r wrote:

> E' probabile che all'interno di questo loop il numero di elementi del
> vettore possa cambiare. In questo caso non appena il programma sta per
> passare al prossimo step di iterazione esso crasha.
>
> Avevo pensato ad un controllo a fine step per saltare fuori dal ciclo ma non
> mi sembra il massimo dell'eleganza.

E' un problema abbastanza classico con i container STL, con vector non
hai soluzione se non saltare fuori dal vettore, in quanto ogni rimozione
potenzialmente invalida tutti gli iteratori, se pero` usi list (o map, o
set) hai la garanzia che una rimozione invalidi solo l'iteratore
attuale, quindi puoi scrivere qualcosa di simile:

list<Object*>::iterator nextit;

for( list<Object*>::iterator it = ObjectVec.begin(); it !
ObjectVec.end(); it = nextit)
{
nextit = it;
++nextit;
(*it)->doSomeOperation();
}

Se l'operazione di rimozione la sposti nel ciclo puoi anche evitare
l'uso di "nextit" in quanto l'erase() su list e map se non erro
restituiscono l'iteratore all'elemento successivo nel container.

---
Bye,
Gabry

[ Auf dieses Posting antworten ]