for(it = gameObjects.begin();it!=gameObjects.end();it++){
it->second->update(frameTime);
if(it->second->getSprite()->GetPosition().y > 500){
std::cout << "Removing enemy" << std::endl;
std::map<sf::String,VisibleGameObject*>::iterator itor = Remove(it->second->getName());
if(itor!=gameObjects.end()){
std::cout << "itor doesn't equal" << std::endl;
it=itor;
}else{
std::cout << "itor = end" << std::endl;
it=itor;
}
}
}
Как только напечатано itor = end
, it ошибки - «итератор набора карт не может быть увеличен». Я думал, что цикл for должен завершиться, прежде чем он снова увеличится, так как it! = gameObjects.end ()
будет ложным после этого. Добавление разрыва
в операторе else решает проблему.
Почему он не работает без break
? Я предполагаю, что это как-то связано с тем, когда итератор увеличивается по сравнению с тем, когда условие проверен.