C++ C++;“如何拥有”;不是";(!)在谓词中?
这可能是一个愚蠢的问题,但只是想知道是否有任何解决办法 谓词中是否有“Not”的方法 例如:C++ C++;“如何拥有”;不是";(!)在谓词中?,c++,C++,这可能是一个愚蠢的问题,但只是想知道是否有任何解决办法 谓词中是否有“Not”的方法 例如: std::remove_if(s.begin(), s.end(), !IsCorrect); // ^ 或者,无论如何,我必须创建IsNotCorrect函数吗 您可以使用std::not1,它否定一元谓词: #include <functional> std::remove_if(s.begin(), s.end(),
std::remove_if(s.begin(), s.end(), !IsCorrect);
// ^
或者,无论如何,我必须创建IsNotCorrect函数吗 您可以使用
std::not1
,它否定一元谓词:
#include <functional>
std::remove_if(s.begin(), s.end(), std::not1(std::ptr_fun(IsCorrect)));
#包括
std::remove_if(s.begin()、s.end()、std::not1(std::ptr_fun(IsCorrect)));
如果
IsCorrect
是一个可调整的函数,那么您不需要ptr\u fun
,但是如果它只是一个普通函数,那么您需要。您也可以对C++11中的任何谓词使用类似的蛮力
template<class Predicate>
class not {
//Has it's inverse predicate
Predicate _Pred;
public:
//Construct with arguments
//required to construct _Pred
template<class... Args>
not(Args&&... args);
//bool operator() with
//_Pred arguments
template<class... Args>
bool operator()(Args&&... args) const;
};
template<class Predicate>
template<class... Args>
not<Predicate>::not(Args&&... args): _Pred(args...) {}
template<class Predicate>
template<class... Args>
bool not<Predicate>::operator()
(
Args&&... args
) const { return !_Pred(args...); }
模板
类不{
//有它的逆谓词吗
谓词_Pred;
公众:
//带参数的构造
//需要构建_Pred
模板
非(Args&…Args);
//带有
//_Pred参数
模板
布尔运算符()(Args&&…Args)常量;
};
模板
模板
not::not(Args&&…Args):\u Pred(Args…{}
模板
模板
bool not::运算符()
(
Args&&…Args
)常量{return!\u Pred(args…;}
Do的可能重复请注意,std::ptr\u fun
已被弃用。我认为,std::ref
可以作为这里的替代品。@ECrownofFire:Right,ptr\u fun
在C++11中已经过时。我认为原则上有一个项目,通过2011个之前问的所有C++问题,用C++ 11(和/或C++ 14)更新它们的答案,其中一个更好的解决方案是可用的;最好在构造函数和函数调用操作符中转发参数:“std::forward