C++ Erase-remove 向量中不存在值的成语
C++ Erase-remove Idiom on non-existant value in vector
我想从向量中删除一个元素,但不能保证该元素存在。
我在网上看过,但没有找到有关擦除-删除习语如何处理不在容器中的值的信息。
我的向量声明如下:(成员在代码的其他部分中为 added/modified)
std::vector<Person*> _members
我想在包含 _members 作为属性的 class 组中创建一个删除方法,以尝试从组中删除给定的人。
我目前正在使用:(要删除的人是指向 Person 对象的指针)
_members.erase(std::remove(_members.begin(), _members.end(), person_to_remove), _members.end());
这将如何处理尝试删除不在矢量中的人?理想情况下,我还想 return 一个布尔值来确认删除是否成功,我当前的实现是否有办法做到这一点?
How will this handle attempting to remove a Person which is not in the vector ?
Erase-Remove 习语正确处理不存在的元素(以及多个元素)。
Ideally I would also like to return a boolean to confirm whether the removal has been successful or not, is there a way to do so with my current implementation?
您可以对比一下去除前后的尺寸:
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();
我想从向量中删除一个元素,但不能保证该元素存在。 我在网上看过,但没有找到有关擦除-删除习语如何处理不在容器中的值的信息。
我的向量声明如下:(成员在代码的其他部分中为 added/modified)
std::vector<Person*> _members
我想在包含 _members 作为属性的 class 组中创建一个删除方法,以尝试从组中删除给定的人。
我目前正在使用:(要删除的人是指向 Person 对象的指针)
_members.erase(std::remove(_members.begin(), _members.end(), person_to_remove), _members.end());
这将如何处理尝试删除不在矢量中的人?理想情况下,我还想 return 一个布尔值来确认删除是否成功,我当前的实现是否有办法做到这一点?
How will this handle attempting to remove a Person which is not in the vector ?
Erase-Remove 习语正确处理不存在的元素(以及多个元素)。
Ideally I would also like to return a boolean to confirm whether the removal has been successful or not, is there a way to do so with my current implementation?
您可以对比一下去除前后的尺寸:
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();