| replace_copy_if | function template | 
| template < class InputIterator, class OutputIterator, class Predicate, class T >
  OutputIterator replace_copy_if ( InputIterator first, InputIterator last,
                                   OutputIterator result, Predicate pred,
                                   const T& new_value ); | <algorithm> | 
Copy range replacing value
Copies the values of the elements in the range [first,last) to the range positions beginning at location pointed by result, replacing those where pred is true by new_value.
The behavior of this function template is equivalent to:
| 
template < class InputIterator, class OutputIterator, class Predicate, class T >
  OutputIterator replace_copy_if ( InputIterator first, InputIterator last,
                                   OutputIterator result, Predicate pred,
                                   const T& new_value )
{
  for (; first != last; ++first, ++result)
    *result = (pred(*first))? new_value: *first;
  return result;
}
 | 
Parameters
- first, last
- Input iterators to the initial and final positions in a sequence. The range used is [first,last), which contains all the elements between first and last, including the element pointed by first but not the element pointed by last.
- result
- Output iterator to the initial position of the range where function results are stored. The range includes as many elements as [first,last).
- pred
- Unary predicate taking an element in the range as argument, and returning a value indicating the falsehood (with false, or a zero value) or truth (true, or non-zero) of some condition applied to it. This can either be a pointer to a function or an object whose class overloads operator().
- new_value
- Replacement value.
Return value
An iterator pointing to the element that follows the last element written in the result sequence.
Example
| 
// replace_copy_if example
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
bool IsOdd (int i) { return ((i%2)==1); }
int main () {
  vector<int> first,second;
  vector<int>::iterator it;
  // set some values:
  for (int i=1; i<10; i++) first.push_back(i);          // 1 2 3 4 5 6 7 8 9
  second.resize(first.size());   // allocate space
  replace_copy_if (first.begin(), first.end(), second.begin(), IsOdd, 0);
                                                        // 0 2 0 4 0 6 0 8 0
  cout << "second contains:";
  for (it=second.begin(); it!=second.end(); ++it)
    cout << " " << *it;
  cout << endl;
 
  return 0;
}
 | 
Output:
| second contains: 0 2 0 4 0 6 0 8 0
 | 
Complexity
Applies 
pred and assigns values as many times as the number of elements in the range 
[first,last).
See also
| replace | Replace value in range (function template) | 
| transform | Apply function to range (function template) |