replace_copy_if
Replaces elements that match a criterion while copying the whole range
You're viewing an older version of this page (#4139). View the current version.
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 http://www.codecogs.com/reference/computing/stl/algorithms/modifying/replace_copy.php"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 1
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;
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;
}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
- Nicolai M. Josuttis: "The C++ Standard Library"