Witam mam problem z usuwaniem elementu w wektorze. Sprawa wygląda tak, że mam wektor wskaźników na klasę Bullet i wektor wskaźników na klasę Unit moja pierwsza pętla iteruje po wektorze Bullets i zaczyna się w środku iterowanie po wszystkich przeciwnikach. Chciałbym, żeby to działało tak, że jak któraś z kul trafi w któregoś z przeciwników to jest ona usuwana, ale jak robię to za pomocą erase to dostaję błąd i wydaje mi się, że nie powinienem usuwać nic z wektora bullet do momentu przejścia przez cały wektor. Dlatego staram się zapisywać, które elementy chcę usunąć i po wykonaniu obu pętli to zrobić. Próbowałem czegoś takiego:
void Game::dynamicAcctions(std::vector<Unit*> &enemyUnits, std::vector<Bullet*> &bullets)
{
std::vector<Bullet*>::iterator remove = deleteBullets(enemyUnits,bullets);
bullets.erase(remove, bullets.end());
}
std::vector<Bullet*>::iterator Game::deleteBullets(std::vector<Unit*> enemyUnits, std::vector<Bullet*> bullets)
{
std::vector<Bullet*>::iterator remove = std::remove_if(bullets.begin(), bullets.end(),
[&](Bullet* x)
{
for (std::vector<Unit*>::iterator it = enemyUnits.begin(); it != enemyUnits.end(); ++it)
{
if (x->collision->checkCollision((*it)->collision))
{
return true;
}
else
{
return false;
}
}
});
return remove;
}
Ale nie działa, dostaję Expression: vector erase iterator outside range.