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

eliminar_copiar()

Es una función STL en c ++ que se define en la biblioteca de algoritmos. Copia los elementos en el rango [primero, último] al rango que comienza en el resultado, excepto aquellos elementos que se comparan iguales a los elementos dados.

  • El rango resultante es más corto que [primero, último] en tantos elementos como coincidencias en la secuencia, que se «eliminan».
  • Se conserva el orden relativo de los elementos que no se eliminan.
  • La función usa el operador == para comparar los elementos individuales con el valor dado.

Plantilla de función

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.

Ejemplos:

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 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;
  
}
Producción:

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

Complejidad: Lineal O(n)

remove_copy_if

Es una función STL en c ++ que se define en la biblioteca de algoritmos. Copia los elementos en el rango [primero, último] al rango que comienza en el resultado, excepto aquellos elementos que cumplen con una condición dada (como número impar, número par, número primo, número no primo, etc.).

  • Copia los elementos del rango [primero, último] al rango que comienza en resultado, excepto aquellos elementos para los que la función de condición devuelve verdadero.
  • El rango resultante es más corto que [primero, último] en tantos elementos como coincidencias, que se «eliminan».

Plantilla de función

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).

Ejemplos:

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 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;
  
}
Producción:

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

Complejidad: Lineal O(n)

Lista de la biblioteca <algorithms> en C++ STL
Todos los artículos STL de C++

Publicación traducida automáticamente

Artículo escrito por Dibyendu Roy Chaudhuri y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *