[英]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::vector
的erase(...)
方法擦除迭代器。
您可以檢查此答案以獲取如何從索引中獲取迭代器。 盡管我建議您重新考慮算法,以便不需要這種轉換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.