nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

Modificare un vettore durante l'iterazione della stessa.

Von: St4lk3r (st4lk3r87@alice.it) [Profil]
Datum: 17.01.2008 21:32
Message-ID: <478fbb5b$0$36441$4fafbaef@reader5.news.tin.it>
Newsgroup: it.comp.giochi.sviluppo
Mettiamo caso che abbia un vettore di puntatori ad oggetti che viene iterato
ad ogni loop di gioco.

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.



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

if( vectorIsChanged )
{
vectorIsChanged = false;
break;
}
}
Un altro metodo potrebbe essere quello di informare il sistema di eseguire
una modifica sul vettore dopo che il ciclo termina. Questo però mi pare un
pò fuorviante in quanto potrebbe essere strettamente necessario che
l'oggetto venga eliminato prima che il prossimo oggetto possa fare le sue
operazioni.



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

//... Il sistema si occupa di eliminare o aggiungere un elemento al vettore.
Avete alcune soluzioni ?


begin 666 smile.png
MB5!.1PT*&@H````-24A$4@````\````/" ,````,"&5X````!&=!34$``*_(
M-P6*Z0```!ET15AT4V]F='=A<F4`061O8F4@26UA9V5296%D>7')93P```#8
M4$Q416)B8O[Q0T9&1BHJ*B0:`/_M>__@`/>B`/[N9/[E`/_8`/S\$?_4`/WU
M*O^S`/[J`#<N%?^Z`/.@`/WR`/_=`/WW`/_,`/_59>F=`/WR`?^L`/_>0L:'
M`/[L$?WT$?_@8__#(/_55M:>+D,](?[,8OWU)O_C5O_ $?[M*MZC,>"I`.7-
M)_&?`/_!`/SY`.?0.?[C&?BD`/_=`?_A>_WW`?[D$?_%*O_:$?_(1O_%/O[E
M`O[Q8O_6"O_C#OBQ*N2D&?6Y1?[J`N.@#OFJ$?_<*N*;`````/___[&L1_@`
M``!(=%).4___________________________________________________
M____________________________________________`)SL\F ```"P241!
M5'C:5,]%%L,P# 10!QIFAJ;,S,RME?O?J';23>=IH;_2".4T0%-LB*J=]NK-
MHP6E82Y52-;A$*AA+)T1DA *.RT@MAB&85DRZ>%AY0@6`UWG.#*?W>T."*Y9
M35756K;=]]\O8L'L^C/?-06M(6)B3X:-ZYJR=X$)M2+($,?/TPJ2B#CG%4\H
M^AD.YNG]4: I6C U1%R%HA^V;=M(',JR/[\4G0CSO_Y__WT%& "K42:1RFA%
-J@````!)14Y$KD)@@@``
`
end


[ Auf dieses Posting antworten ]

Antworten