Open In App

std::string::remove_copy(), std::string::remove_copy_if() in C++

Last Updated : 29 May, 2018
Suggest changes
Share
Like Article
Like
Report

remove_copy()

It is an STL function in c++ which is defined in algorithm library. It copies the elements in the range [first, last) to the range beginning at result, except those elements that compare equal to given elements.
  • The resulting range is shorter than [first,last) by as many elements as matches in the sequence, which are "removed".
  • The relative order of the elements not removed is preserved.
  • The function uses operator == to compare the individual elements to given value.
Function Template
ResultIterator remove_copy(ForwardIterator first, ForwardIterator last, ResultIterator result ,const T& ele); first, last :  Forward 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 the resulting sequence is stored. The pointed type shall support being assigned the value of an element in the range [first, last). ele : element to be removed. 
Examples:
 Input : b d a f g h a k given element is a Output :b d f g h k _ _ Input : b k c s n m c l given element is c Output : b k s n m l _ _ '_' represent remove places
CPP
// CPP code to demonstrate remove_copy() #include <vector> #include <algorithm> #include <iostream> using namespace std; // Function to remove_copy from v1 result vector is v2 void removecopyDemo(vector <int> &v1) {  remove_copy(v1.begin(), v1.end(), v1.begin(), 3); } // Function to print content of vector void print(vector<int>&v) {  int len = v.size();  for (int i = 0; i < len; i++)  cout << v[i] << " ";  cout << endl; } // Driver code int main() {  // vector   vector <int> v1, v2(10);    // push data in vector   for(int i = 10; i <= 25; i++)  v1.push_back(i % 6);    cout << "elements of v1 before remove_copy: "<<endl;  print(v1);  removecopyDemo(v1);    cout << "After removing element 3" <<endl;  print(v1); return 0; } 
Output:
 elements of v1 before remove_copy: 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 After removing element 3 4 5 0 1 2 4 5 0 1 2 4 5 0 1 0 1 
Complexity: Linear O(n)

remove_copy_if

It is a STL function in c++ which is defined in algorithm library. It copies the elements in the range [first, last) to the range beginning at result, except those elements that meets to a given condition (like odd number, even number, prime number, non-prime number etc ).
  • Copies the elements in the range [first, last) to the range beginning at result, except those elements for which condition function returns true.
  • The resulting range is shorter than [first, last) by as many elements as matches, which are "removed".
Function Template
 ResultIterator remove_copy_if(ForwardIterator first, ForwardIterator last, ResultIterator result, UnaryPredicate pred); pred :  Unary function that accepts an element in the range as argument, and returns a value convertible to bool. The value returned indicates whether the element is to be removed (if true, it is removed). 
Examples:
 Input : 1 2 3 4 5 6 7 8 9 check if a number is prime and remove Output :1 4 6 8 9 0 0 0 0 Input :1 2 3 4 5 6 7 8 9 check if a number is even and remove Output :1 3 5 7 9 0 0 0 0 
CPP
// CPP code to demonstrate remove_copy_if() #include <vector> #include <algorithm> #include <iostream> using namespace std; bool IsOdd(int i) { return ((i % 2) != 0); } // Function to remove_copy from v1 result vector is v2 void remove_copy_ifDemo(vector <int> &v1, vector<int> &v2) {  remove_copy_if(v1.begin(), v1.end(), v2.begin(), IsOdd); } // Function to print content of vector void print(vector<int>&v) {  int len = v.size();  for (int i = 0; i < len; i++)  cout << v[i] << " ";  cout << endl; } // Driver code int main() {  // declare vector v1, v2  vector <int> v1, v2(10);    // push data in vector   for(int i = 10; i <= 20; i++)  v1.push_back(i);    cout << "elements of v1 before remove_copy: ";  print(v1); remove_copy_ifDemo(v1,v2);    cout << "elements of v1 after remove_copy: ";  print(v1);   cout << "After removing Odd Numbers from v1"  " copy result in vector v2" <<endl;  print(v2); return 0; } 
Output:
 elements of v1 before remove_copy: 10 11 12 13 14 15 16 17 18 19 20 elements of v1 after remove_copy: 10 11 12 13 14 15 16 17 18 19 20 After removing Odd Numbers from v1 copy result in vector v2 10 12 14 16 18 20 0 0 0 0 
Complexity: Linear O(n) List of <algorithms> library in C++ STL All STL articles of C++

Explore