Вы считаете правильным.Итератор увеличивается в конце цикла, а затем проверяется условие.
Поэтому после вывода «itor = end» он увеличивается до gameObjects.end()++
, что, конечно, недопустимо.Вы можете обойти, проверив itor == gameObjects.end()
внутри цикла, а затем прервавшись.
РЕДАКТИРОВАТЬ: Как указано в комментариях, лучше просто удалить ++ it из цикла, чтобы избежать пропуска элемента после удаленного элемента.Например:
for( it = gameObjects.begin(); it!=gameObjects.end(); ) {
...
if(it->second->getSprite()->GetPosition().y > 500) {
it = Remove( it->second->getName() );
} else {
++it;
}
}