remove_copy_if
Copies elements that do not 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 replace_copy_if() algorithm is defined in the standard header <algorithm> and in the nonstandard backward-compatibility header <algo.h>.Interface
#include <algorithm> template < class InputIterator, class OutputIterator, class Predicate > OutputIterator remove_copy_if( InputIterator first, InputIterator last, OutputIterator result, Predicate pred );Parameters:
Parameter | Description |
---|---|
first | An input iterator addressing the position of the first element in the range from which elements are being removed |
last | An input iterator addressing the position one past the final element in the range from which elements are being removed |
result | An output iterator addressing the position of the first element in the destination range to 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_copy_if function copies all elements from the range[first, last)
to a range beginning at result
, that doesn't verify the predicate pred
into result
.Return Value
Returns a forward iterator addressing the new end position of the destination range, one past the final element of the remnant sequence free of the elements satisfying the predicate. The order of the elements not removed remains stable.Complexity
The complexity is linear; there arelast - first
comparisons for equality and last - first
assignments.References
Example:
Example - remove_copy_if algorithm
Problem
The following program demonstrates how to use remove_copy() and remove_copy_if().
Workings
#include <iostream> #include <list> #include <set> #include <algorithm> #include <iterator> using namespace std; int main() { list<int> coll1; INSERT_ELEMENTS(coll1,1,6); INSERT_ELEMENTS(coll1,l,9); PRINT_ELEMENTS(coll1); //print elements without those having the value 3 remove_copy(coll1.begin(), coll 1.end(), //source ostream_iterator<int>(cout," "), //destination 3); //removed value cout <<endl; //print elements without those having a value greater than 4 remove_copy_if (coll1.begin(), coll1.end(), //source ostream_iterator<int>(cout," "), //destination bind2nd(greater<int>(),4)); //removed elements cout <<endl; //copy all elements greater than 3 into a multiset multiset<int> coll2; remove_copy_if (coll1.begin(), coll1.end(), //source inserter(coll2,coll2.end()), //destination bind2nd(less<int>(),4)); //elements not copied PRINT_ELEMENTS(coll2); return 0; }
Solution
Output:
1 2 3 4 5 6 1 2 3 4 5 6 7 8 9
1 2 4 5 6 1 2 4 5 6 7 8 9
1 2 3 4 1 2 3 4
4 4 5 5 6 6 7 8 9
1 2 4 5 6 1 2 4 5 6 7 8 9
1 2 3 4 1 2 3 4
4 4 5 5 6 6 7 8 9
References
- Nicolai M. Josuttis: "The C++ Standard Library"