[英]Erasing an element from a vector within a for loop - C++
I'm trying to erase an enemies' health value when they are destroyed and I get the error "No instance of overloaded function "..." matches the argument list if I have the following: 我正在尝试销毁被摧毁的敌人的健康值,并且如果遇到以下情况,则会收到错误消息:“没有重载函数的实例” ...”与参数列表匹配:
upgradeHealth.erase(inner)
It seems to only accept something like this: 似乎只接受这样的东西:
upgradeHealth.erase(upgradeHealth.begin())
I need the element at position inner to be erased so that it matches the enemy that just got destroyed. 我需要擦除内部位置的元素,以使其与刚刚被消灭的敌人相匹配。 Here's the for loop:
这是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;
}
}
}
There are only two overloaded member functions erase
in class std::vector
std::vector
类中只有两个重载成员函数被erase
iterator erase(iterator position);
iterator erase(iterator first, iterator last);
You can only erase an iterator using the erase(...)
methods of the std::vector
. 您只能使用
std::vector
的erase(...)
方法擦除迭代器。
You can check this answer for how to get an iterator from an index. 您可以检查此答案以获取如何从索引中获取迭代器。 Although I would suggest you rethink your algorithm so that you don't need such a conversion.
尽管我建议您重新考虑算法,以便不需要这种转换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.