I have forgotten
my Password

Or login with:

  • Facebookhttp://facebook.com/
  • Googlehttps://www.google.com/accounts/o8/id
  • Yahoohttps://me.yahoo.com

replace_copy_if

Replaces elements that match a criterion while copying the whole range
+ View version details

Key Facts

Gyroscopic Couple: The rate of change of angular momentum (\tau) = I\omega\Omega (In the limit).
  • I = Moment of Inertia.
  • \omega = Angular velocity
  • \Omega = 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, 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

Description

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.

Complexity

The complexity is linear; performs (last - first) comparisons for equality and at most (last - first) assignments.
Example:

Example - replace_copy_if algorithm
Problem
The following program demonstrates how to use both replace_copy() and replace_copy_if() functions.
Workings
#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
 
using namespace std;
 
int main()
{
  list<int> coll;
 
  INSERT_ELEMENTS(coll,2,6);
  INSERT_ELEMENTS(coll,4,9);
  PRINT_ELEMENTS(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;
}
Solution
Output:

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