0

我有代码

vector <int> v;

v.erase(remove_if(v.begin(),v.end(),bool_checker),v.end());

其中v是一个包含随机数的向量,{2, 4 ,5, 6, 7, 11}并且bool_checker是一个评估该数字是否为素数的类对象

我想删除不是素数的数字。换句话说,我想v看起来像{5, 7, 11}。现在v.erase()正在擦除不是素数。所以输出是{2, 4, 6}

我无法让编译器接受 not of bool_checker. 我已经尝试过(!bool_checker),bool_checker==false等,但这些都没有奏效。有任何想法吗?

4

3 回答 3

9
v.erase(remove_if(v.begin(),v.end(),std::not1(bool_checker)),v.end());
于 2013-10-01T16:04:13.053 回答
3

您可以使用 lambda 来返回返回值的否定:

v.erase(std::remove_if(v.begin(), v.end(), [] (int x) {
    return !bool_checker(x);
}), v.end());
于 2013-10-01T16:01:19.777 回答
3

首先,2是质数。

其次,没有看到 的内容bool_checker,听起来你的逻辑在里面倒退了。一个简单的版本(效率不高)可能如下所示:

bool bool_checker(int i)
{
    int root = (int)sqrt(i);
    for (int j = 2; j <= root; ++j)
    {
        if (i % j == 0)
        {
            return false; // number is not prime
        }
    }
    return true; // number is prime
}

如果你不能或不想改变你的bool_checker函子,你可以否定它:

v.erase(remove_if(v.begin(), v.end(), std::not1(bool_checker)), v.end());
于 2013-10-01T16:04:37.643 回答