Итак, я пытаюсь создать своего рода систему сохранения/перехода, в которой игрок может вернуть определенные аспекты мира к предыдущей точке. По какой-то причине следующий код создает векторные ошибки. ("Вектор индекс выходит за пределы диапазона")Проблемы с векторным диапазоном
(EntityList является PTR и recordedEntityList не является)
void Map::record()
{
for(unsigned int x = 0; x < entityList.size(); x++)
{
if(entityList[x]->getRewind() == true)
{
recordedEntityList.push_back(*entityList[x]);
printf("%f, %f\n", entityList[x]->getSprite().getPosition().x, entityList[x]->getSprite().getPosition().y);
}
}
}
void Map::rewind()
{
for(unsigned int x = 0; x < entityList.size(); x++)
{
if(entityList[x]->getRewind() == true)
{
entityList.erase(entityList.begin() + x);
}
}
for(unsigned int y = 0; y < recordedEntityList.size(); y++)
{
entityList.push_back(&recordedEntityList[y]);
}
recordedEntityList.clear();
}
Вы не можете изменить вектор (или любой контейнер), который вы выполняете, не испортив вещи. Вы можете заглянуть в [Erase-Remove Idiom] (http://en.wikipedia.org/wiki/Erase-remove_idiom). –
И BTW, видя 'if (condition == true)' всегда заставляет меня плакать. Просто используйте 'if (condition)'. –
Возможно, вы захотите прокомментировать, если вы измените свой вопрос, сделав мой ответ устаревшим ... – interjay