这是一些代码,用于检查2个单元在相互攻击后是否被杀死,我通过了 vector 中的位置,但是当我删除一个单元时, vector 的大小已更改,因此第二个单元超出范围。如何同时删除两者?

if ((MyHealth <= 0) && (EnemyHealth <= 0))
{
    PlayerUnits.erase(PlayerUnits.begin() + MyUnit, PlayerUnits.begin() + EnemyUnit);
}
else if (MyHealth <= 0)
{
    PlayerUnits.erase(PlayerUnits.begin() + MyUnit);
}
else if (EnemyHealth <= 0)
{
    PlayerUnits.erase(PlayerUnits.begin() + EnemyUnit);
}

最佳答案

第一点:在您的第一个程序段中,调用erase(x, y)所做的事情与您预期的不同-它擦除了从索引x开始直到索引y之前的整个元素范围。例如,如果我们有 vector [a,b,c,d,e,f,g],则delete(2,5)将擦除索引2,3,4,因此我们以[a,b, f,g]。我猜您只想删除两个元素,而不是整个范围。

第二点:正如DieterLücking指出的那样,只需先擦除较高索引的元素,如下所示:

if (MyUnit > EnemyUnit) {
    PlayerUnits.erase(PlayerUnits.begin() + MyUnit);
    PlayerUnits.erase(PlayerUnits.begin() + EnemyUnit);
} else {
    PlayerUnits.erase(PlayerUnits.begin() + EnemyUnit);
    PlayerUnits.erase(PlayerUnits.begin() + MyUnit);
}

关于c++ - 从 vector C++中删除多个元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29805925/

10-11 00:39