I have forgotten

• https://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 () = (In the limit).
• = Moment of Inertia.
• = Angular velocity
• = 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.

### References

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"