【发布时间】:2013-11-30 00:29:24
【问题描述】:
所以我正在尝试创建一种保存/跳转系统,让玩家可以将世界的某些方面恢复到以前的点。出于某种原因,以下代码会产生矢量错误。 ("向量下标超出范围")
(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。
-
顺便说一句,看到
if (condition == true)总是让我哭泣。只需使用if (condition)。 -
如果您更改问题使我的答案过时,您可能需要发表评论...
-
对。我很抱歉。您的答案确实过时了,虽然这是一个问题,但不是原因。
-
我对其进行了编辑,使其不再过时。