I have forgotten
my Password

Or login with:

  • Facebookhttp://facebook.com/
  • Googlehttps://www.google.com/accounts/o8/id
  • Yahoohttps://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.
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"