I have forgotten

• https://me.yahoo.com

# remove_copy_if

Copies elements that do not match a given criterion
View version details

### 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 are last - 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
References
• Nicolai M. Josuttis: "The C++ Standard Library"