|
replace_copy_if
function template
<algorithm>
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 );
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:
1 2 3 4 5 6 7 8 9
|
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
// 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) |
|