在C++中"过滤"高阶函数

mis*_*tor 7 c++ functional-programming higher-order-functions

C++标准库和/或Boost是否与filter函数式语言中的函数类似?

我能找到的最接近的功能是std::remove_copy_if它似乎与我想要的相反.是否boost::lambda有任何函数来获取我的谓词的否定版本(类似于notHaskell)?我可以否定我的谓词并std::remove_copy_if随之使用它.

请注意,我不是在问如何filter用C++ 编写函数; 我只想问标准库和/或Boost是否已经提供了这样的功能.

提前致谢.

Tho*_*tit 6

Boost.Range中有一个等效的过滤器.
这是一个例子:

#include <vector>
#include <boost/lambda/lambda.hpp>
#include <boost/range/algorithm_ext/push_back.hpp>
#include <boost/range/adaptor/filtered.hpp>

using namespace boost::adaptors;
using namespace boost::lambda;

int main()
{
    std::vector<int> v = {3, 2, 6, 10, 5, 2, 45, 3, 7, 66};
    std::vector<int> v2;
    int dist = 5;

    boost::push_back(v2, filter(v, _1 > dist));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)


wil*_*ilx 6

包括<functional>用于std::not1和尝试cont.erase (std::remove_if (cont.begin (), cont.end (), std::not1 (pred ())), cont.end ());