Отслеживание удаленных элементов с помощью std::remove_if

Я хочу удалить некоторые элементы из вектора и использую для этого алгоритм remove_if. Но я хочу отслеживать удаленные элементы, чтобы потом выполнить над ними какую-нибудь операцию. Я попробовал это со следующим кодом:

#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;


struct IsEven
{
    bool operator()(int n) 
    {
        if(n % 2 == 0)
        {
            evens.push_back(n);
            return true;
        }

        return false;
    }

    vector<int> evens;
};

int main(int argc, char **argv)
{

    vector<int> v;
    for(int i = 0; i < 10; ++i)
    {
        v.push_back(i);
    }

    IsEven f;
    vector<int>::iterator newEnd = remove_if(v.begin(), v.end(), f);
    for(vector<int>::iterator it = f.evens.begin(); it != f.evens.end(); ++it)
    {
        cout<<*it<<"\n";
    }

    v.erase(newEnd, v.end());

    return 0;
}

Но это не работает, так как remove_if принимает копию моего объекта функтора, поэтому сохраненные четные числа вектор недоступен. Как правильно этого добиться?

P.S. : Пример с четными и нечетными значениями приведен только для примера, мой реальный код немного отличается. Так что не предлагайте способ определить чет или шанс по-разному.

5
задан Asha 5 March 2012 в 08:18
поделиться