Я пытаюсь удалить элементы из std :: list
и сохранить некоторую статистику удаленных элементов.
Для этого я использую функцию remove_if из списка и у меня есть предикат. Я хотел бы использовать этот предикат для сбора статистики. Вот код для предиката:
class TestPredicate
{
private:
int limit_;
public:
int sum;
int count;
TestPredicate(int limit) : limit_(limit), sum(0), count(0) {}
bool operator() (int value)
{
if (value >= limit_)
{
sum += value;
++count; // Part where I gather the stats
return true;
}
else
return false;
}
};
А вот код для алгоритма:
std::list < int > container;
container.push_back(11);
TestPredicate pred(10);
container.remove_if(pred)
assert(pred.count == 1);
К сожалению, утверждение неверно, потому что предикат передается по значению. Есть ли способ принудительно передать его по ссылке?