erase
не сбой. Если вы как-то передадите те же параметры в erase
во второй раз, то он попытается удалить что-то еще. В зависимости от точного сценария, который может привести к удалению чего-то, что вы не намеревались, или к повреждению памяти и возможному сбою программы, если параметры больше не действительны вообще.
Однако, во фрагменте кода, который вы показываете, я не вижу в этом проблемы. Как только какой-либо враг будет удален из вектора, петля никогда не столкнется с ним снова, чтобы даже попытаться проверить еще один выстрел против него.
Хотя у вас есть другая проблема: когда элемент стирается из вектора, индексы всех последующих элементов в векторе смещаются вниз на 1. (Если у вас есть 4 элемента в векторе, они будут проиндексированы 0,1,2,3. Если вы удалите элемент с индексом 1, то у вас останется 3 элемента с индексами 0,1,2.) Следствием этого кода будет то, что когда элемент находится на indexs
стерт, другой элемент сместится вниз, чтобы занять это место. Но цикл просто продолжается и увеличивает indexs
, так что элемент будет пропущен.