remove_if
Removes elements that match a given criterion
Key Facts
Gyroscopic Couple: The rate of change of angular momentum () = (In the limit).- = Moment of Inertia.
- = Angular velocity
- = Angular velocity of precession.
Blaise Pascal (1623-1662) was a French mathematician, physicist, inventor, writer and Catholic philosopher.
Leonhard Euler (1707-1783) was a pioneering Swiss mathematician and physicist.
Definition
The remove_if() algorithm is defined in the standard header <algorithm> and in the nonstandard backward-compatibility header <algo.h>.Interface
#include <algorithm> template < class ForwardIterator, class Predicate > ForwardIterator remove_if( ForwardIterator first, ForwardIterator last, Predicate pred );Parameters:
Parameter | Description |
---|---|
first | A forward iterator pointing to the position of the first element in the range from which elements are being removed |
last | A forward iterator pointing to the position one past the final element in the range from which elements are being removed |
pred | The unary predicate that must be satisfied is the value of an element is to be replaced |
Description
Remove_if algorithm removes all elements from a range that returnstrue
using a given predicate.
Removing is done by shifting the elements in the range in such a way that elements to be erased are overwritten. Remove is stable, meaning that the relative order of elements that are not removed is unchanged.References
Example:
Example - remove_if algorithm
Problem
The following program demonstrates how to use remove() and remove_if().
Workings
#include <iostream> #include <vector> #include <algorithm> #include <iterator> using namespace std; int main() { vector<int> coll; INSERT_ELEMENTS(coll,2,6); INSERT_ELEMENTS(coll,4,9); INSERT_ELEMENTS(coll,1,7); PRINT_ELEMENTS(coll,"coll: "); //remove all elements with value 5 vector<int>::iterator pos; pos = remove (coll. begin(), coll.end(), //range 5); //value to remove PRINT_ELEMENTS(coll,"size not changed: "); //erase the "removed" elements in the container coll. erase (pos, coll.end()); PRINT_ELEMENTS(coll,"size changed: "); //remove all elements less than 4 coll.erase(remove_if (coll.begin(), coll.end(), //range bind2nd(less<int>(),4)), //remove criterion coll.end()); PRINT_ELEMENTS(coll,"<4 removed: : "); return 0; }
Solution
Output:
coll: 2 3 4 5 6 4 5 6 7 8 9 1 2 3 4 5 6 7
size not changed: 2 3 4 6 4 6 7 8 9 1 2 3 4 6 7 5 6 7
size changed: 2 3 4 6 4 6 7 8 9 1 2 3 4 6 7
<4 removed: : 4 6 4 6 7 8 9 4 6 7
size not changed: 2 3 4 6 4 6 7 8 9 1 2 3 4 6 7 5 6 7
size changed: 2 3 4 6 4 6 7 8 9 1 2 3 4 6 7
<4 removed: : 4 6 4 6 7 8 9 4 6 7
References
- Nicolai M. Josuttis: "The C++ Standard Library"