【发布时间】:2010-09-03 11:26:58
【问题描述】:
C++ 标准库和/或 Boost 是否有任何类似于函数式语言中的 filter 函数?
我能找到的最接近的函数是std::remove_copy_if,但它似乎与我想要的相反。 boost::lambda 是否有任何函数来获取我的谓词的否定版本(类似于 Haskell 中的 not)?我可以否定我的谓词并将其与std::remove_copy_if 一起使用。
请注意,我不是在问如何用 C++ 编写 filter 函数;我只是在问标准库和/或 Boost 是否已经提供了这样的功能。
提前致谢。
【问题讨论】:
-
std::remove_copy_if()与您想要的相反吗?相反的对立面是什么?如果您只想删除元素,请使用 remove/erase idiom:container.erase (std::remove_if (container.begin (), container.end (), pred()), container.end ()); -
@wilx:我希望保留满足谓词的元素,并删除其他元素。
标签: c++ functional-programming higher-order-functions