C++ Erase-remove Idiom on non-existant value in vector

A.D*_*A.D 0 c++ erase-remove-idiom c++17

我想从向量中删除一个元素,但不能保证该元素存在。我在网上查看过,但没有发现有关擦除删除习语如何处理不在容器中的值的信息。

我的向量是这样声明的:(在代码的其他部分中添加/修改了成员)

std::vector<Person*> _members
Run Code Online (Sandbox Code Playgroud)

我想在包含 _members 作为属性的类 Group 中创建一个 remove 方法,以尝试从组中删除给定的人。

我目前正在使用:(要删除的人是指向 Person 对象的指针)

_members.erase(std::remove(_members.begin(), _members.end(), person_to_remove), _members.end());
Run Code Online (Sandbox Code Playgroud)

这将如何处理试图删除不在向量中的 Person ?理想情况下,我还想返回一个布尔值来确认删除是否成功,我当前的实现有没有办法这样做?

Jar*_*d42 6

这将如何处理试图删除不在向量中的 Person ?

Erase-Remove idiom 正确处理不存在的元素(以及多个元素)。

理想情况下,我还想返回一个布尔值来确认删除是否成功,我当前的实现有没有办法这样做?

您可以比较移除前后的尺寸:

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();
Run Code Online (Sandbox Code Playgroud)

  • 如果没有元素被删除,则不会移动任何内容,并且擦除不会执行任何操作。2 个选项是线性的并且相似。 (2认同)