Forgotten Password?

Or login with:

  • Facebook
  • Google
  • Yahoo


Replaces elements that match a criterion while copying the whole range


The replace_copy_if() algorithm is defined in the standard header <algorithm> and in the nonstandard backward-compatibility header <algo.h>.


#include <algorithm>
template < class InputIterator, class OutputIterator, 
           class Predicate, class Type >
   OutputIterator replace_copy_if(
      InputIterator first, 
      InputIterator last, 
      OutputIterator result, 
      Predicate pred, 
      const Type& val

Parameter Description
first An input iterator pointing to the position of the first element in the range from which elements are being replaced
last An input iterator pointing to the position one past the final element in the range from which elements are being replaced
result An output iterator pointing to the position of the first element in the destination range to which elements are being copied
pred The unary predicate that must be satisfied is the value of an element is to be replaced
val The new value being assigned to the elements whose old value satisfies the predicate


Replace_copy_if does the same thing that replace copy but uses the predicate pred instead of operator==. to compare elements.

Return Value

The return value is an iterator pointing to the end of the output range.


The complexity is linear; performs (last - first) comparisons for equality and at most (last - first) assignments.
Example - replace_copy_if algorithm
The following program demonstrates how to use both replace_copy() and replace_copy_if() functions.
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
  list<int> coll;
  //print all elements with value 5 replaced with 55
  replace_copy(coll.begin(), coll.end(),        //source
               ostream_iterator<int>(cout," "), //destination
               5,                               //old value
               55);                             //new value
  cout << endl;
  //print all elements with a value less than 5 replaced with 42
  replace_copy_if (coll.begin(), coll.end(),        //source
                   ostream_iterator<int>(cout," "), //destination
                   bind2nd(less<int>(),5),     //replacement criterion
                   42);                        //new value
  cout << endl;
  //print each element while each odd element is replaced with 0
  replace_copy_if (coll.begin(), coll.end(),   // source
                   ostream_iterator<int>(cout," "), // destination
                   bind2nd (modulus<int>(),2), // replacement criterion
                   0);                         // new value
  cout << endl;
  return 0;

2 3 4 5 6 4 5 6 7 8 9
2 3 4 55 6 4 55 6 7 8 9
42 42 42 5 6 42 5 6 7 8 9
2 0 4 0 6 4 0 6 0 8 0
  • Nicolai M. Josuttis: "The C++ Standard Library"

Last Modified: 7 Jan 12 @ 20:19     Page Rendered: 2022-03-14 17:25:02