Я хочу удалить некоторые элементы из вектора
и использую для этого алгоритм 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. : Пример с четными и нечетными значениями приведен только для примера, мой реальный код немного отличается. Так что не предлагайте способ определить чет или шанс по-разному.