std::replace, std::replace_if
| Defined in header <algorithm> | ||
|---|---|---|
| (1) | ||
| template< class ForwardIt, class T >
void replace( ForwardIt first, ForwardIt last,
              const T& old_value, const T& new_value ); | (until C++20) | |
| template< class ForwardIt, class T >
constexpr void replace( ForwardIt first, ForwardIt last,
                        const T& old_value, const T& new_value ); | (since C++20) | |
| template< class ExecutionPolicy, class ForwardIt, class T >
void replace( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last,
              const T& old_value, const T& new_value ); | (2) | (since C++17) | 
| (3) | ||
| template< class ForwardIt, class UnaryPredicate, class T >
void replace_if( ForwardIt first, ForwardIt last,
                 UnaryPredicate p, const T& new_value ); | (until C++20) | |
| template< class ForwardIt, class UnaryPredicate, class T >
constexpr void replace_if( ForwardIt first, ForwardIt last,
                           UnaryPredicate p, const T& new_value ); | (since C++20) | |
| template< class ExecutionPolicy, class ForwardIt, class UnaryPredicate, class T >
void replace_if( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last,
                 UnaryPredicate p, const T& new_value ); | (4) | (since C++17) | 
Replaces all elements satisfying specific criteria with new_value in the range [first, last).
old_value.p returns true.policy. These overloads do not participate in overload resolution unless std::is_execution_policy_v<std::decay_t<ExecutionPolicy>> is trueParameters
| first, last | - | the range of elements to process | 
| old_value | - | the value of elements to replace | 
| policy | - | the execution policy to use. See execution policy for details. | 
| p | - | unary predicate which returns  trueif the element value should be replaced.The expression  | 
| new_value | - | the value to use as replacement | 
| Type requirements | ||
| - ForwardItmust meet the requirements of LegacyForwardIterator. | ||
| - UnaryPredicatemust meet the requirements of Predicate. | ||
Return value
(none).
Complexity
Exactly last - first applications of the predicate.
Exceptions
The overloads with a template parameter named ExecutionPolicy report errors as follows:
-  If execution of a function invoked as part of the algorithm throws an exception and ExecutionPolicyis one of the standard policies,std::terminateis called. For any otherExecutionPolicy, the behavior is implementation-defined.
-  If the algorithm fails to allocate memory, std::bad_allocis thrown.
Notes
Because the algorithm takes old_value and new_value by reference, it can have unexpected behavior if either is a reference to an element of the range [first, last).
Possible implementation
| First version | 
|---|
| template<class ForwardIt, class T>
void replace(ForwardIt first, ForwardIt last,
             const T& old_value, const T& new_value)
{
    for (; first != last; ++first) {
        if (*first == old_value) {
            *first = new_value;
        }
    }
} | 
| Second version | 
| template<class ForwardIt, class UnaryPredicate, class T>
void replace_if(ForwardIt first, ForwardIt last,
                UnaryPredicate p, const T& new_value)
{
    for (; first != last; ++first) {
        if(p(*first)) {
            *first = new_value;
        }
    }
} | 
Example
The following code at first replaces all occurrences of 8 with 88 in a vector of integers. Then it replaces all values less than 5 with 55.
#include <algorithm>
#include <array>
#include <iostream>
#include <functional>
 
int main()
{
    std::array<int, 10> s{5, 7, 4, 2, 8, 6, 1, 9, 0, 3};
 
    std::replace(s.begin(), s.end(), 8, 88);
 
    for (int a : s) {
        std::cout << a << " ";
    }
    std::cout << '\n';
 
    std::replace_if(s.begin(), s.end(), 
                    std::bind(std::less<int>(), std::placeholders::_1, 5), 55);
    for (int a : s) {
        std::cout << a << " ";
    }
    std::cout << '\n';
}Output:
5 7 4 2 88 6 1 9 0 3 5 7 55 55 88 6 55 9 55 55
See also
| copies a range, replacing elements satisfying specific criteria with another value (function template) | 
    © cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
    http://en.cppreference.com/w/cpp/algorithm/replace