Pergunta

Existe um único algoritmo que elementos remove um recipiente como acontece no código a seguir?

vec_it = std::remove_if( vec.begin(), vec.end(), pred );
vec.erase( vec_it, vec.end() );
Foi útil?

Solução

A forma idiomática para fazê-lo é como jalf disse. Você pode construir sua própria função de fazer isso mais facilmente:

template<typename T, typename Pred> void erase_if(T &vec, Pred pred)
{
    vec.erase(std::remove_if(vec.begin(), vec.end(), pred), vec.end());
}

Assim você pode usar

std::vector<int> myVec;
// (...) fill the vector. (...)
erase_if(myVec, myPred);

Outras dicas

Você quer dizer isso?

vec.erase( std::remove_if( vec.begin(), vec.end(), pred ), vec.end() );

Essa é a maneira idiomática para fazê-lo.

Eu não sei. Talvez haja. Mas se houver, então ele vai ser um inferno de um comunicado. Ninguém será capaz de compreender ou mantê-lo. Se essas duas linhas fazer o que quiser, ficar com eles. Eles são perfeitamente bem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top