remove_copy_if
Copies elements that do not match a given criterion
You're viewing an older version of this page (#4147). View the current version.
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 1
The following program demonstrates how to use remove_copy() and remove_copy_if().
#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;
}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
- Nicolai M. Josuttis: "The C++ Standard Library"