find
возвращает итератор, который указывает на найденный элемент, который (в вашем случае) является элементом, который вы хотите удалить.Когда вы вычисляете pos
, вы получаете индекс для элемента сразу после того, который был найден.Если найденный элемент является последним элементом в векторе, это будет ссылаться на элемент one-past-the-end.Когда вы затем вычислите итератор для этого, вы получите итератор end
, который вы не можете разыменовать.
Вам не нужно вычислять индекс.Просто позвоните
std::swap(*it, m_Entities.back());
, а затем немедленно позвоните mEneities.pop_back()
в теле if
, а не после.При вызове pop_back
за пределами if
вы удалите последний элемент вектора, если искомый элемент не был найден.