📅  最后修改于: 2023-12-03 15:29:54.046000             🧑  作者: Mango
在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()
算法找到第一个满足这个条件的整数,即第一个偶数。