从for循环中的向量中删除元素 - C ++

时间:2014-12-04 15:00:29

标签: c++ vector

我正在尝试在它们被销毁时擦除敌人的健康值,并且我收到错误“没有重载函数的实例”......“如果我有以下内容,则匹配参数列表:

upgradeHealth.erase(inner)

似乎只接受这样的事情:

upgradeHealth.erase(upgradeHealth.begin())

我需要擦除内部位置的元素,以便它与刚刚被摧毁的敌人相匹配。这是for循环:

for (outer = 0; outer < bullets.size(); outer++)              
{
    for (inner = 0; inner < upgrades.size(); inner++)       
    {
        if (upgrades[inner]->HitTest(bullets[outer])) 
        {
            upgradeHealth[inner] -= 1;
            bullets.erase(outer--);
            multiplier += 0.01;
            hasHit = true;
            multiplierTime = 0;
            cout << upgradeHealth[inner] << endl;
            if (upgradeHealth[inner] == 0) 
                upgradeHealth.erase(inner), upgrades.erase(inner), score += 100 * multiplier;
            break;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

erase

中只有两个重载的成员函数std::vector
iterator erase(iterator position);
iterator erase(iterator first, iterator last);

答案 1 :(得分:0)

您只能使用erase(...)的{​​{1}}方法删除迭代器。

您可以检查this answer如何从索引获取迭代器。虽然我建议你重新考虑你的算法,这样你就不需要这样的转换。