remove_if,得到相反的布尔 C++
remove_if, getting the opposite bool c++
我有代码
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}
.
我无法让编译器接受bool_checker
的不。我试过(!bool_checker)
、bool_checker==false
等,但这些都没有奏效。有什么想法吗?
v.erase(remove_if(v.begin(),v.end(),std::not1(bool_checker)),v.end());
您可以使用 lambda 返回返回值的否定:
v.erase(std::remove_if(v.begin(), v.end(), [] (int x) {
return !bool_checker(x);
}), v.end());
首先,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());
相关文章:
- 一个关于在C++中重载布尔运算符的问题
- 提升精神:解析布尔表达式并简化为规范范式
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 线程之间的布尔停止信号
- 布尔比较运算符是如何在C++中工作的
- 变量定义到C++布尔值转换
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 隐式常量/非常量运算符布尔
- 如何编写一个使用n倍三元条件语句的C++布尔函数
- 如何在 c++ 中让布尔变量返回为 0 或 1 而不是真或假?
- 重载更少,则运算符返回相反的布尔值
- 将布尔变量添加到 int
- 为什么布尔开关语句有编译器警告?
- 将此布尔值传递给此函数的最有效方法是什么?
- 如何使布尔变量仅在设置为 true 时才为真?
- 为什么我不能在返回 const 的布尔函数中为类成员变量赋值?C++
- 程序中的布尔函数返回输入的范围无论如何都是无效的
- 当我尝试通过 arduino 上的引用传递布尔数组时出现问题
- 如何设置 c++ 类的布尔值?
- 使用 MAKEWORD / MAKEWPARAM 使用布尔值而不是布尔值