Как аккуратно переместить некоторые элементы из std :: set в другой контейнер? - PullRequest
2 голосов
/ 06 января 2012

Поскольку итератор становится недействительным после операции удаления, как мне выполнить итерацию с наименьшим количеством кода по всем элементам std::set, удалив некоторые из них?

1 Ответ

6 голосов
/ 06 января 2012
// Filters the elements of a set:  elements that satisfy the predicate 'pred'
// are removed from the source set and inserted into the output.
template <typename TSet, typename TOutputIterator, typename TPredicate>
void extract_if(TSet& s, TOutputIterator out, TPredicate pred)
{
    for (typename TSet::iterator it(s.begin()); it != s.end();)
    {
        if (pred(*it))
        {
            *out++ = *it;
            it = s.erase(it);
        }
        else
        {
            ++it;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...