[英]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
{2, 4 ,5, 6, 7, 11}
bool_checker
{2, 4 ,5, 6, 7, 11}
而bool_checker
是一個評估該數字是否為質數的類對象
我想刪除不是素數的數字。 換句話說,我希望v
看起來像{5, 7, 11}
。 目前, v.erase()
不會擦除質數。 因此輸出為{2, 4, 6}
。
我不能讓編譯器接受不bool_checker
。 我已經嘗試過(!bool_checker)
, bool_checker==false
等,但是這些都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_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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.