gpt4 book ai didi

c++ - 否定 remove_if 中的谓词

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:14:17 26 4
gpt4 key购买 nike

我尝试使用 vector::erase 和 std::remove_if 从 vector 中删除对象。我有一个外部 namespace 来进行选择:

template<unsigned int value, someType collection>
bool Namespace::isValid(const Foo* object){

do something
}

现在我有一个 vector ,其中包含一些我想过滤的元素(如果它们有效)。为此,我这样做:

 std::vector<foo*> myVector;
//fill it
myVector.erase( std::remove_if(myVector.begin(), myVector.end(), Namespace::isValid<myValue, myCollectionType>), myVector.end());

现在这工作正常并删除了所有有效的候选人,但实际上我想保留并删除所有其他人。因此,我需要否定谓词。有什么办法吗?遗憾的是,目前在此上下文中不支持 C++11。

谢谢

最佳答案

使用 std::not1 适配器否定 isValid 函数返回的值。请注意,std::not1 需要一个函数 object(C++ 称之为“仿函数”),因此如果您在 namespace 中有一个普通函数,您还需要 std::ptr_fun从您的函数中创建一个函数对象。

所以,

myVector.erase( std::remove_if( myVector.begin(),
myVector.end(),
Namespace::isValid<myValue, myCollectionType> ),
myVector.end() );

成为

myVector.erase( std::remove_if( myVector.begin(),
myVector.end(),
std::not1( std::ptr_fun( Namespace::isValid<myValue, myCollectionType> ) ) ),
myVector.end() );

关于c++ - 否定 remove_if 中的谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14219724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com