C ++ Стереть-удалить идиому на несуществующее значение в векторе - PullRequest
0 голосов
/ 29 апреля 2020

Я хочу удалить элемент из вектора, но это не гарантирует, что элемент существует. Я посмотрел онлайн, но не нашел информации о том, как идиома erase-remove будет обрабатывать значение, которого нет в контейнере.

Мой вектор объявлен как таковой: (с добавлением / изменением членов в других части кода)

std::vector<Person*> _members

Я хочу создать метод удаления внутри класса Group, содержащего _members в качестве атрибута, для попытки удаления данного человека из группы.

В настоящее время я являюсь происходит с: (где для удаления указатель на объект Person)

_members.erase(std::remove(_members.begin(), _members.end(), person_to_remove), _members.end());

Как этот дескриптор будет пытаться удалить Person, которого нет в векторе? В идеале я также хотел бы вернуть логическое значение, чтобы подтвердить, было ли удаление успешным или нет, есть ли способ сделать это с моей текущей реализацией?

1 Ответ

6 голосов
/ 29 апреля 2020

Как этот дескриптор будет пытаться удалить человека, которого нет в векторе?

Идиома Erase-Remove правильно обрабатывает отсутствующий элемент (а также несколько элементов).

В идеале я также хотел бы вернуть логическое значение, чтобы подтвердить, было ли удаление успешным или нет, есть ли способ сделать это с моей текущей реализацией?

Вы могли бы сравнить Размер до и после удаления:

const auto old_size = _members.size();
_members.erase(std::remove(_members.begin(), _members.end(), person_to_remove),
               _members.end());
const bool deleted = old_size != _members.size();
...