I have forgotten

• https://me.yahoo.com

# remove_copy_if

Copies elements that do not match a given criterion

## 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"