我目前有一个针对uni的僵尸项目,但是我在某些方面遇到了麻烦。
如何正确删除载体?我们有僵尸和药丸对象存储在向量中。我的第一个想法是更改符号,但显然这是行不通的,因为这就是我正在更改的所有内容:
for (int i = 0; i < MAXPILLS; i++)
{
//if pill coordinates = spot coordinates
if ((pills.at(i).y == sp.y) && (pills.at(i).x == sp.x))
{
pills.at(i).symbol = TUNNEL; //make pill a tunnel
}
}
而是需要完全删除此药丸对象。当僵尸掉进一个洞(
sp
是僵尸类的实例)时,我也必须这样做。如何将它们全部删除?
最佳答案
使用remove_if算法代替:
pills.erase(std::remove_if(pills.begin(), pills.end(), [&sp](const decltype(pills.at(0)) &p){return p.x == sp.x && p.y == sp.y;}));
请注意,我在这里使用的是lambda函数,它是C ++ 11构造,因此您可能要检查是否允许首先在分配中使用它,如果不允许使用C +,则将其替换为functor对象+11。