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_ifare allowed to be statefulstd::remove_ifdoesn't remove elements, it only moves them to the end and you should then useeraseto actually remove them from the container.