【发布时间】:2009-08-07 10:16:44
【问题描述】:
我在循环一个向量时遇到问题,从另一个向量中删除值有时会使我的程序崩溃。我有这个 int 向量来跟踪应该删除哪些元素。
std::vector<int> trEn;
然后我循环遍历这个向量:
struct enemyStruct {
float x, y, health, mhealth, speed, turnspeed;
double angle, tangle;
};
std::vector<enemyStruct> enemies;
循环如下所示:
for ( unsigned int i = 0; i < bullets.size(); i++ ) {
for ( unsigned int j = 0; j < enemies.size(); j++ ) {
if ( bullets[i].x > enemies[j].x-10 && bullets[i].x < enemies[j].x+10 && bullets[i].y > enemies[j].y-10 && bullets[i].y < enemies[j].y+10 )
{
enemies[j].health-=bullets[i].dmg;
if(enemies[j].health<=0){trEn.push_back(j);break;}
}
}
}
子弹向量只是另一个类似于敌人向量的向量,但其中包含子弹。那个似乎不是问题。所有这些代码都运行良好,但在实际删除我的敌人向量中的项目时,程序有时会崩溃。
std::reverse( trEn.begin(), trEn.end() );
for ( unsigned int g = 0; g < trEn.size(); g++ ) {
unsigned int atmp = trEn.at(g);
if(atmp<=enemies.size()&&atmp>=0)enemies.erase(enemies.begin()+atmp,enemies.begin()+atmp+1);
} trEn.clear();
首先我反转int´s 的向量,使其从后向前。如果我不这样做,trEn[0] 之后的所有值都将无效。
这是让我崩溃的循环,但只是有时。我正在尝试做的是一个自上而下的射击游戏,似乎当很多东西应该同时被移除时,它就会崩溃。请帮我解决这个问题!
只要问我是不是不清楚还是有什么遗漏。
【问题讨论】:
标签: c++ loops for-loop memory-management vector