繁体   English   中英

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

[英]Erasing an element from a vector within a for loop - C++

我正在尝试销毁被摧毁的敌人的健康值,并且如果遇到以下情况,则会收到错误消息:“没有重载函数的实例” ...”与参数列表匹配:

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;
        }
    }
}

std::vector类中只有两个重载成员函数被erase

iterator erase(iterator position);
iterator erase(iterator first, iterator last);

您只能使用std::vectorerase(...)方法擦除迭代器。

您可以检查此答案以获取如何从索引中获取迭代器。 尽管我建议您重新考虑算法,以便不需要这种转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM