だから、私は上記のようにしたいと思っていました。私は、通常の繰り返し、メソッドの3番目の部分になると素晴らしいアイデアを考え出しました。しかし、私はループの中にループがあるときにこの問題に対処する方法を知らない。そして、はい、私はそれが消去中に要素をスキップすることによって引き起こされることを知っています。消去を使ってベクトルから要素を消去する
int Collision::missleCollision(vector <Missle*> &missle_vector, vector <Enemy*> &enemy_vector,
vector <Obstacle*> &obstacle_vector, bool G)
{
int hit=0;
for (auto it=missle_vector.begin(); it!=missle_vector.end(); ++it)
{
for (auto jt=enemy_vector.begin(); jt!=enemy_vector.end(); ++jt)
{
double x, y;
x=(*jt)->getX()-(*it)->getX();
y=(*jt)->getY()-(*it)->getY();
if (x<64 && x>-151 && y<14 && y>-103)
{
delete *it;
it=missle_vector.erase(it);
delete *jt;
jt=enemy_vector.erase(jt);
hit++;
}
}
}
if(G){
for (auto it = missle_vector.begin(); it!=missle_vector.end(); ++it)
{
for (auto jt = obstacle_vector.begin(); jt!=obstacle_vector.end(); ++jt)
{
double x, y;
x=(*jt)->getX()-(*it)->getX();
y=(*jt)->getY()-(*it)->getY();
if (x<64 && x>-61 && y<14 && y>-61)
{
delete *it;
it = missle_vector.erase(it);
}
}
}
}
for (auto it = missle_vector.begin(); it != missle_vector.end();)
{
if ((*it)->getX() > 1920)
{
delete *it;
it = missle_vector.erase(it);
}
else
it++;
}
return hit;
}
[回答](http://stackoverflow.com/questions/27586288/class-destruction-segfault/27587053#27587053)を参照してください。アルゴリズム関数を使用して、コンテナを保存する必要のないアイテムに分割する必要があります。そこから作業してください。 – PaulMcKenzie
'std :: vector>' ... –