我尝试使用vector :: erase和std :: remove_if从向量中删除对象.我有一个外部命名空间来执行选择ala:
template<unsigned int value, someType collection>
bool Namespace::isValid(const Foo* object){
do something
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个向量,其中包含一些我想要过滤的元素,如果它们是有效的.为了做到这一点,我做:
std::vector<foo*> myVector;
//fill it
myVector.erase( std::remove_if(myVector.begin(), myVector.end(), Namespace::isValid<myValue, myCollectionType>), myVector.end());
Run Code Online (Sandbox Code Playgroud)
现在这工作正常并删除所有有效的候选人,但实际上我想保留并删除所有其他.因此,我需要否定谓词.有没有办法这样做?不幸的是,在这种情况下目前不支持C++ 11.
谢谢
使用std::not1适配器否定函数返回的值isValid.请注意,std::not1需要一个函数对象(C++将其称为"仿函数"),因此如果在名称空间中有一个普通函数,则还需要std::ptr_fun从函数中创建一个函数对象.
所以,
myVector.erase( std::remove_if( myVector.begin(),
myVector.end(),
Namespace::isValid<myValue, myCollectionType> ),
myVector.end() );
Run Code Online (Sandbox Code Playgroud)
变
myVector.erase( std::remove_if( myVector.begin(),
myVector.end(),
std::not1( std::ptr_fun( Namespace::isValid<myValue, myCollectionType> ) ) ),
myVector.end() );
Run Code Online (Sandbox Code Playgroud)