Метод одного оператора для удаления элементов из контейнера - PullRequest
1 голос
/ 28 ноября 2008

Существует ли единственный алгоритм, который удаляет элементы из контейнера, как это происходит в следующем коде?

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

Ответы [ 3 ]

6 голосов
/ 28 ноября 2008

Идиоматический способ сделать это, как сказал Джалф. Вы можете создать свою собственную функцию, чтобы сделать это проще:

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

Так что вы можете использовать

std::vector<int> myVec;
// (...) fill the vector. (...)
erase_if(myVec, myPred);
5 голосов
/ 28 ноября 2008

Вы имеете в виду, как это?

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

Это идиоматический способ сделать это.

0 голосов
/ 28 ноября 2008

Я не знаю. Может быть, есть. Но если есть, то это будет адское заявление. Никто не сможет понять или поддержать это. Если эти две строки делают то, что вы хотите, просто придерживайтесь их. Они совершенно хороши.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...