Se sto utilizzando un iterator
in un ciclo for
e io uso erase
su un'iterazione corrente di iteratore, per il ciclo dovrebbe continuare fine e accedere al resto degli elementi list
?Cancellazione mentre l'iterazione di uno std :: list
Da quello che ho letto, questo dovrebbe essere il caso ed è una caratteristica di distinzione principale di list
rispetto a deque
o vector
. Per i miei scopi, un queue
potrebbe funzionare ma ho bisogno di questo comportamento.
Ecco il ciclo sto considerando:
std::list<Sequence>::iterator iterator;
iterator=m_concurrents.begin();
for (;iterator!=m_concurrents.end();++iterator){
if (iterator->passes()){
m_concurrents.erase(iterator);
}
}
in questo esempio, si interrompe l'iterazione dopo che è stata cancellata, quindi non iterando l'elenco per rivedere potenzialmente altri elementi. Sono interessante nell'iterizzare l'intera lista e rimuovere le voci come desiderato. Da quello che ho capito, questo è sicuro con un 'elenco' ma non con altri contenitori. Questo è il cuore della mia domanda, mi dispiace se non è stato chiaro. – johnbakers
Questo non funzionerà con i compilatori non C++ 11. I metodi dei membri cancellati restituiscono solo 'void' in C++ 03. Cambiando 'i = list.erase (i)' a 'list.erase (i ++)' lo aggiusterà. – Casey
@Casey [ti sbagli] (http://en.cppreference.com/w/cpp/container/list/erase) – David