将remove_if转换为remove_not_if

Dan*_*Dan 6 c++ stl predicates remove-if

如何反转谓词的返回值,并删除返回false而不是true的元素?

这是我的代码:

headerList.remove_if(FindName(name));
Run Code Online (Sandbox Code Playgroud)

(请忽略缺少擦除)

使用FindName一个简单的仿函数:

struct FindName
{
    CString m_NameToFind;

    FindInspectionNames(const CString &nameToFind)
    {
        m_NameToFind = nameToFind;
    }

    bool operator()(const CHeader &header)
    {
        if(header.Name == m_NameToFind)
        {
            return true;
        }

        return false;
    }
};
Run Code Online (Sandbox Code Playgroud)

我想要像:

list.remove_if(FindName(name) == false);
Run Code Online (Sandbox Code Playgroud)

还没有使用c ++ 0x,所以不允许使用lambdas.我希望有一个比编写NotFindName仿函数更好的解决方案.

Dev*_*lar 15

not1<functional>标题:

headerList.remove_if( std::not1( FindName( name ) ) );
Run Code Online (Sandbox Code Playgroud)

哦,这个:

if(header.Name == m_NameToFind)
{
    return true;
}

return false;
Run Code Online (Sandbox Code Playgroud)

不要这样做.

return ( header.Name == m_NameToFind );
Run Code Online (Sandbox Code Playgroud)

这是好,不是吗?