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
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 ]
