正确实现删除矢量元素

时间:2013-07-14 05:39:59

标签: c++ algorithm stl

ALL,

这是this线程的延续。

我尝试的是编写以下代码:

struct Remover : public std::binary_function<CPlayer,void,bool>
{
public:
    bool operator()(const CPlayer &player) const
    {
        return player.IsNewPlayer();
    }
};

并以这种方式称呼它:

players_pool->erase( std::remove_if( players_pool->begin(), players_pool->end(), std::bind2nd( Remover() ) ) );

但它给了我一个错误:

std :: bind2nd():需要2个参数 - 提供1个。

如何正确调用此仿函数?

谢谢。

2 个答案:

答案 0 :(得分:3)

您无需在Remover()中包裹std::bind2nd()

此外,您不需要从std::binary_function<>派生(这是错的,无论如何; Remover是一元函子)。事实上,你不需要从任何事物中获得。

最后,如果您的编译器支持C ++ 11,您可以将代码缩减到:

players_pool->erase( std::remove_if( begin(*players_pool), end(*players_pool),
                                     [](const CPlayer &player) {
                                         return player.IsNewPlayer();
                                     } ),
                     end(*players_pool) );

答案 1 :(得分:0)

只需将binary_function更改为unary_function即可 您还需要将结束迭代器添加到擦除调用中,以便擦除所有删除的值。