Это вызывает неопределенное поведение. Для объяснения прочитайте ответ @James Kanze .
Я бы предпочел перейти к следующему вопросу: если в другой теме ни один из ответов не использовал std::find_if
, то это потому, что в этих сообщениях не говорится об удалении и удалении конкретного элемента. Oни
похоже, что все элементы удалены, или лишь немногие из них использовали функтор, где проверяют, какие объекты удаляются, что тоже хорошо.
Но основное различие между вашим кодом и их кодом заключается в том, что ваш код удаляет и удаляет не более один объект, а их код может удалить все объекты (тот, который использует функтор, и внутри функтора он удаляет объект при выполнении условия).
Ну, это то, что я мог бы сказать для правильно написанного std::find_if
.
Однако на самом деле я не мог понять ваш код, особенно эти две строки:
//I formatted the code so that entire code is visible without
//scrolling horizontally
SomeStruct someStruct(identifier);
std::vector<SomeStruct*>::iterator it = std::find_if
(
vWrapper.begin(),
vWrapper.end(),
SomeStruct::Find_SomeStruct(&identifier)
);
Что там делает первая строка? Вы объявили переменную и забыли ее? Ну, может быть, вы используете это где-то еще; в этом случае все в порядке.
Но что такое SomeStruct::Find_SomeStruct
? Это вложенный класс, который может действовать как функтор? статическая функция или что? Ваша компиляция успешно? Полный ответ также зависит от этих вопросов, которые я поставил.