📜  C++中的std :: unary_negate()与示例(1)

📅  最后修改于: 2023-12-03 15:29:54.046000             🧑  作者: Mango

C++中的std::unary_negate()

在C++中,std::unary_negate()是一个函数适配器,它可以将一个谓词函数或函数对象的返回值反转。这意味着,如果原始函数返回true,则经过std::unary_negate()处理后会返回false,反之亦然。

语法
template <class Predicate>
class unary_negate
  : public unary_function<typename Predicate::argument_type,bool>
{
public:
  explicit unary_negate (Predicate pred);
  bool operator() (const typename Predicate::argument_type& x) const;
};

template <class Predicate>
unary_negate<Predicate> not1 (const Predicate& pred);
参数
  • Predicate:表示要反转返回值的谓词函数或函数对象。
返回值
  • unary_negate<Predicate>:一个函数适配器,用于反转谓词函数或函数对象的返回值。
示例

下面是一个简单的示例,展示如何使用std::unary_negate()函数适配器。我们定义了原始的谓词函数isOdd(),它将返回给定的整数是否为奇数。然后,我们使用std::not1()函数适配器将这个谓词反转,这样它就会返回给定的整数是否是偶数了。

#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>

bool isOdd(int i){
    return (i % 2 == 1);
}

int main(){
    std::vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    auto it = std::find_if(v.begin(), v.end(), std::not1(std::ptr_fun(isOdd)));
    //等价于 auto it = std::find_if(v.begin(), v.end(), [](int i){ return (i % 2 == 0); });

    if (it != v.end()){
        std::cout << "First even number found: " << *it << std::endl;
    } else {
        std::cout << "No even numbers found." << std::endl;
    }

    return 0;
}

这个程序会输出:

First even number found: 2

我们首先定义了一个isOdd()函数,它用于检查一个整数是否是奇数。然后,我们使用std::not1()函数适配器将它的返回值反转。这样,我们就得到了一个新的函数,它将返回给定的整数是否是偶数。接下来,我们利用std::find_if()算法找到第一个满足这个条件的整数,即第一个偶数。