Стирание элемента из вектора внутри цикла for - C ++

0

Я пытаюсь стереть значение здоровья врагов, когда они уничтожены, и я получаю сообщение об ошибке "Нет экземпляра перегруженной функции"..."соответствует списку аргументов, если у меня есть следующее:

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;
        }
    }
}
  • 1
    вместо этого попробуйте "upgradeHealth.begin () + inner"
  • 0
    Я подумал об этом, но затмил, но это работает, так что спасибо!
Теги:
vector

2 ответа

1

Есть только две перегруженные функции-члены erase в классе std::vector

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

Вы можете удалить только итератор, используя методы erase(...) std::vector.

Вы можете проверить этот ответ, как получить итератор из индекса. Хотя я бы предложил вам пересмотреть свой алгоритм, чтобы вам не понадобилось такое преобразование.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню