Возможно, проблема в том, что index
инициализируется значением, не входящим в диапазон MyPersons
, поэтому, если это значение не найдено, вы получите ошибку.
Вам следует использовать стандартные алгоритмыдля этого типа задачи, чтобы удалить первые person*
с возрастом 25, вы можете использовать:
auto itr = std::find_if(MyPersons.cbegin(), MyPersons.cend(),
[] (person* pperson) { return pperson->age == 25; });
if (itr != MyPersons.cend()) MyPersons.erase(itr);
Чтобы удалить все person*
с возрастом 25, вы можете использовать:
MyPersons.erase(std::remove_if(MyPersons.begin(), MyPersons.end(),
[] (person* pperson) { return pperson->age == 25; }),
MyPersons.end());
Использование стандартных алгоритмов предпочтительнее, чем использование ручных циклов.Намерение яснее, результирующий код часто менее многословен, и, что более важно, стандартные алгоритмы с большей вероятностью будут правильными.
Кроме того, вы, вероятно, поступаете неправильно, сохраняя указатели на ваши данные вstd::vector
.