J
Jorgen Grahn
I'm looking at std::remove_if(Iter, Iter, Pred) and
std::list::remove_if(Pred). I'd like to use it to remove elements from
a std::list *and* find out how many elements were removed.
Is there a clean way?
At first I wrote a predicate class which counted how many times its
operator() returned true -- but then I realized that predicates are
passed by value, so if I did
MyPredicate p;
my_list.remove_if(p);
cout << "removed " << p.size << " elements\n";
'p' was copied, and never used again.
I can pass a pointer or reference to a counter:
unsigned size = 0;
MyPredicate p(&size);
...
but that doesn't seem very elegant. Have I missed something? Is there
a standard idiom for dealing with this?
/Jorgen
std::list::remove_if(Pred). I'd like to use it to remove elements from
a std::list *and* find out how many elements were removed.
Is there a clean way?
At first I wrote a predicate class which counted how many times its
operator() returned true -- but then I realized that predicates are
passed by value, so if I did
MyPredicate p;
my_list.remove_if(p);
cout << "removed " << p.size << " elements\n";
'p' was copied, and never used again.
I can pass a pointer or reference to a counter:
unsigned size = 0;
MyPredicate p(&size);
...
but that doesn't seem very elegant. Have I missed something? Is there
a standard idiom for dealing with this?
/Jorgen