簡體   English   中英

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 {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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM