std::replace and std::replace_if in C++

std::replace

Assigns new_value to all the elements in the range [first, last] that compare to old_value. The function use operator == to compare the individual elements to old_value
Function Template :

void replace (ForwardIterator first, ForwardIterator last,
                const T& old_value, const T& new_value)
first, last : Forward iterators to the initial and final positions
in a sequence of elelments.
old_value : Value to be replaced.
new_value : Replacement value.

Return Value :
This function do not return any value. If elements that needs to be replace is found then element
replaced otherwise remain unchanged.

Examples:

Input : 10 20 30 30 20 10 10 20 
Output : 10 99 30 30 99 10 10 99  // Replaced value 20 in vector to 99.

Input : 3 5 7 8 9 5 4 
Output : 3 5 7 12 9 5 4  // Replaced value 8 by 12.
filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find and replace the value
// with another value in array
// using std::replace
#include <bits/stdc++.h>
using namespace std;
  
// Driver code
int main()
{
    int arr[] = { 10, 20, 30, 30, 20, 10, 10, 20 };
    int n = sizeof(arr) / sizeof(arr[0]);
  
    // variable containing the old and new values
    int old_val = 20, new_val = 99;
      
    // print old array
    cout << "Original Array:";
    for (int i = 0; i < n; i++)
        cout << ' ' << arr[i]; cout << '\n';
          
    // Function used to replace the values
    replace(arr, arr + n, old_val, new_val);
  
    // new array after using std::replace
    cout << "New Array:";
    for (int i = 0; i < n; i++)
        cout << ' ' << arr[i]; cout << '\n';
  
    return 0;
}

chevron_right


Output:

Original Array: 10 20 30 30 20 10 10 20
New Array: 10 99 30 30 99 10 10 99

std::replace_if



Assigns new_value to all the elements in range [first, last] for which pred returns true.
Function Template :

void replace_if (ForwardIterator first, ForwardIterator last,
                   UnaryPredicate pred, const T& new_value)
first, last : Forward iterators to the initial and final positions
in a sequence of elelments.
pred : Unary function that accepts an element in the range as argument, and
returns a value convertible to bool.The returned value indicate whether
the element is to be replaced (if true, it is replaced).
The function shall not modify its argument.
old_value : Value to be replaced.
new_value : Replacement value. 

Examples:

Input : 1 2 3 4 5 6 7 8 9 10  
Output : 0 2 0 4 0 6 0 8 0 10  // Replaced all odd values to 0.

Input : 10 20 30 30 20 10 10 20 
Output : 10 4 30 30 4 10 10 4  // Replaced all number divisible by 4 to 4.
filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP code to find all the elements that are odd
// and replace them with 0.
// using std::replace_if
#include <bits/stdc++.h>
using namespace std;
  
// Function that is used in std::replace_if
// If number is odd return 1, else 0
// 1 (True) means replace the number
// 0 (False) means does not replace
bool IsOdd(int i)
{
    return ((i % 2) == 1);
}
  
// Driver code
int main()
{
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    int n = sizeof(arr) / sizeof(arr[0]);
      
    // print old array
    cout << "Original Array:";
    for (int i = 0; i < n; i++)
        cout << ' ' << arr[i]; cout << '\n';
  
    // replacement value
    int new_val = 0;
  
    // replace_if function
    replace_if(arr, arr + n, IsOdd, new_val);
  
    // new array after using std::replace
    cout << "New Array:";
    for (int i = 0; i < n; i++)
        cout << ' ' << arr[i]; cout << '\n';
  
    return 0;
}

chevron_right


Output:

Original Array: 1 2 3 4 5 6 7 8 9 10
New Array: 0 2 0 4 0 6 0 8 0 10

Also you can add any kind of function in std::replace_if that can only have one argument only.

This article is contributed by Sachin Bisht. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up
Article Tags :
Practice Tags :


1


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.