Problem mit std::list und erase()



  • Hallo! :xmas1:

    Hab folgenden Code:

    for(std::list<boost::shared_ptr<Living>>::iterator it = allLivingsList.begin();  it!=allLivingsList.end(); ++it) {
    			(*it)->Engage(allLivingsList.front());
    			if(!(*it)->isAlive()) {
    				allLivingsList.erase(it);
    			};
    		}
    

    Ich bekomme ein Laufzeitfehler nachdem ich ein Element mit erase(it) entfernt habe. Hab auch schon danach geschaut und die Ursache gefunden(it kann nicht mehr erhöht werden).

    Als Walkaround gab es dann diesen Lösungsansatz:

    for(std::list<boost::shared_ptr<Living>>::iterator it = allLivingsList.begin();  it!=allLivingsList.end();) { //Increment von it entfernt
    			(*it)->Engage(allLivingsList.front());
    			if(!(*it)->isAlive()) {
    				allLivingsList.erase(it);
    				break;	//Hinzugefügt
    			} else {		//Hinzugefügt
    				++it;		//Hinzugefügt
    			}				//Hinzugefügt
    		}
    

    Das gibt zwar keinen Laufzeitfehler mehr, aber das ja nichtmehr dasselbe...
    Die Schleife wird nicht vollständig durchlaufen.
    Wie kann ich das am besten lösen?



  • it = allLivingsList.erase(it);
    

Anmelden zum Antworten