簡體   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