replace_copy_if
Replaces elements that match a criterion while copying the whole range
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 predicatepred
instead of operator==
.
to compare elements.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
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"