【发布时间】:2014-12-05 16:36:13
【问题描述】:
我需要一种方法来从范围中删除所有满足特定条件的元素(在这种特殊情况下为 std::vector)并将这些删除的元素复制到新范围(例如带有输出参数的 std::remove_if。)此操作后输入范围的顺序和输出范围的顺序均不相关。
一种天真的方法是使用std::partition 查找所有“邪恶”元素,然后复制它们并最后删除它们,但这会毫无必要地触及所有“邪恶”元素两次。
另外,我可以自己编写所需的remove_if 变体,但为什么要重新发明轮子(另外我不知道我是否可以匹配高质量库实现的效率)。
所以问题是:
这样的功能是否已经存在? 允许使用 Boost,但首选标准 C++(该项目尚不依赖于 boost)。
如果没有,是否有比纯手工制作的 remove_if 变体更快的智能算法?
【问题讨论】:
-
@IdeaHat 我的“邪恶”元素不必相邻。
-
@0x499602D2 也许我读错了参考资料,但这不只是复制所有“好”元素(我不需要复制顺便说一句)而不修改输入范围吗?
-
它说它复制了不满足某个谓词的元素,但实际上并没有从原始容器中删除元素。由坏。 :)
-
@0x499602D2
remove_copy和remove_copy_if似乎名字很糟糕。没有remove-ing 正在进行!真的很像copy_if_not...
标签: c++