I would like to remove elements from a vector using remove_if
function but limiting the erasing to N elements.
Example:
// predicate function that determines if a value is an odd number.
bool IsOdd (int i) {
if (we deleted more than deleteLimit)
return false;
return ((i%2)==1);
}
void otherFunc(){
int deleteLimit = 10;
// remove odd numbers:
std::vector<int>::iterator newEnd =
std::remove_if (myints.begin(), myints.end(), IsOdd (how to pass deleteLimit?) );
}
I need that IsOdd
predicate stores how many elements it has removed and how many we want to delete.
The only way is to use a global variable? Like this:
int deleteLimit = 10;
int removedSoFar = 0;
bool IsOdd (int i) {
if (deleteLimit < removedSoFar)
return false;
if (i%2==1) {
removedSoFar++
return true;
}
return false;
}
remove_if ...
remove_if
are allowed to be stateful – Underwoodstd::remove_if
doesn't remove elements, it only moves them to the end and you should then useerase
to actually remove them from the container. – Bowens