删除矢量元素的正确实现

Proper implementation of removing vector elements

本文关键字:实现 元素 删除      更新时间:2023-10-16

ALL,

这是这个线索的延续。

我尝试写以下代码:

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个。

如何正确地调用这个函子?

谢谢。

您不需要将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) );

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

相关文章: