理解用于向量删除的erase-remove_if 惯用法
在 C 语言中,erase-remove_if 惯用法被广泛用于从基于给定标准的向量。让我们深入研究这个习惯用法被错误实现的具体示例,并探索潜在的陷阱。
问题:
考虑一个名为 stopPoints 的向量,其中包含整数对和方向价值观。目标是使用erase-remove_if 惯用法从向量中删除包含特定整数(例如 4)的所有对。然而,执行代码后,结果出乎意料。
stopPoints.erase(std::remove_if(stopPoints.begin(), stopPoints.end(), [&](const stopPointPair stopPoint)-> bool { return stopPoint.first == 4; }));
执行此操作后,向量中仍然包含 .first 值设置为 4 的对的实例。
解决方案:
错误在于擦除功能的错误使用。在erase-remove_if习惯用法中,std::erase函数需要两个迭代器——一个是指向要删除的第一个元素的迭代器,另一个是指向容器末尾的迭代器。
stopPoints.erase(std::remove_if(stopPoints.begin(), stopPoints.end(), [](const stopPointPair stopPoint)-> bool { return stopPoint.first == 4; }), stopPoints.end());
在这个更正的实现中,从 std::remove_if 返回的迭代器(指向要删除的第一个元素)到向量末尾的范围被擦除,有效地删除与谓词(.first)匹配的所有元素== 4 在本例中)。
解释:
结论:
eras-remove_if 惯用语是一个强大的工具,可以有效地从向量中删除满足特定条件的元素。了解函数 std::remove_if 和 std::erase 如何交互对于其正确实现至关重要。
以上是为什么使用 Erase-Remove_if 习惯用法从向量中删除元素不能按预期工作?的详细内容。更多信息请关注PHP中文网其他相关文章!