2013-07-14 3 views
0

ВСЕ,Правильная реализация снятия элементов вектора

Продолжение 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()))); 

, но он дает мне ошибку:

зЬй :: bind2nd() : ожидает 2 аргумента - 1 предоставлено.

Как правильно назвать этот функтор?

спасибо.

+2

Понимаете ли вы сообщение об ошибке? 'ожидает 2 аргумента - 1 при условии.' - Кроме того, прочитали ли вы документацию 'std :: bind2nd()'? –

+0

Вам не нужны ни 'bind2nd', ни' Remover'. Посмотрите на 'std :: mem_fun'. –

+0

@ н.м. обратите внимание, что 'std :: mem_fun' устарел. Но ['std :: mem_fn'] (http://en.cppreference.com/w/cpp/utility/functional/mem_fn) может быть альтернативой. – juanchopanza

ответ

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)); 
0

Просто измените функцию binary_function на unary_function.
Вам также нужно добавить конечный итератор к вызову стирания, чтобы стереть все удаленные значения.

Смежные вопросы