【问题标题】:Erasing an element from a vector within a for loop - C++从 for 循环中的向量中删除元素 - C++
【发布时间】:2015-02-02 12:26:25
【问题描述】:

我试图在敌人被摧毁时抹去他们的健康值,如果我有以下情况,我会收到错误“没有重载函数的实例”...”与参数列表匹配:

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

【问题讨论】:

  • 改用“upgradeHealth.begin() + inner”
  • 我曾考虑过这样做,但掩盖了它,但它确实有效,所以谢谢!

标签: c++ vector


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多