método única instrução para elementos remover do recipiente
-
11-07-2019 - |
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() );
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