std::remove, std::remove_if en c++

estándar::eliminar

Se define en la biblioteca <algorithm>. Elimina el valor del rango. Transforma el rango [primero, último) en un rango con todos los elementos que se comparan igual a val eliminados y devuelve un iterador al nuevo final de ese rango. 

  • La función no puede alterar las propiedades del objeto que contiene el rango de elementos (es decir, no puede alterar el tamaño de una array o un contenedor ).
  • El orden relativo de los elementos no eliminados se conserva, mientras que los elementos entre el iterador devuelto y el último se dejan en un estado válido pero no especificado.
  • La función usa operator== para comparar los elementos individuales con val.

Plantilla de función:  

ForwardIterator remove  (ForwardIterator first,
ForwardIterator last, const T& val)

first,last :
  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.

val :
Value to be removed.

Return value :
An iterator to the element that follows the last element not removed.
The range between first and this iterator includes all the elements
in the sequence that do not compare equal to val.

Ejemplo:  

Input : 10 20 30 30 20 10 10 20
Output : 10 30 30 10 10    // Value removed is 20.

estándar::eliminar_si

Transforma el rango [primero, último) en un rango con todos los elementos para los que pred devuelve verdadero eliminados y devuelve un iterador al nuevo final de ese rango. 
Plantilla de función:  

  ForwardIterator remove_if (ForwardIterator first,
  ForwardIterator last, 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).
The function shall not modify its argument.
This can either be a function pointer or a function object.

Ejemplo:  

Input : 1 2 3 4 5 6 7 8 9 10
Output : 2 4 6 8 10    // Odd elements removed. 

CPP

// CPP program to illustrate
// std::remove and std::remove_if
// algorithm
#include <bits/stdc++.h>
 
// Function to check whether
// the element is odd or not.
bool IsOdd(int i) { return ((i % 2) == 1); }
 
// Driver code
int main()
{
    std ::vector<int> vec1{
        10, 20, 30, 30, 20, 10, 10, 20
    };
    std ::vector<int> vec2{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
 
    // Print original vector
    std ::cout << "Original vector : ";
    for (int i = 0; i < vec1.size(); i++)
        std ::cout << " " << vec1[i];
    std ::cout << "\n";
 
    // Iterator that store the position of last element
    std ::vector<int>::iterator pend;
 
    // std ::remove function call
    pend = std ::remove(vec1.begin(), vec1.end(), 20);
 
    // Print the vector
    std ::cout << "After remove : ";
    for (std ::vector<int>::iterator p = vec1.begin();
         p != pend; ++p)
        std ::cout << ' ' << *p;
    std ::cout << '\n';
 
    // Print original vector
    std ::cout << "\nOriginal vector : ";
    for (int i = 0; i < vec2.size(); i++)
        std ::cout << " " << vec2[i];
    std ::cout << "\n";
 
    // std ::remove_if function call
    pend = std ::remove_if(vec2.begin(), vec2.end(), IsOdd);
 
    // the same of the above can be done using lambda
    // function in 1 line
    pend = std ::remove_if(
        vec2.begin(), vec2.end(),
        [](int i) { return ((i % 2) == 1); });
 
    // Print the vector
    std ::cout << "After remove_if : ";
    for (std ::vector<int>::iterator q = vec2.begin();
         q != pend; ++q)
        std ::cout << ' ' << *q;
    std ::cout << '\n';
 
    return 0;
}

Producción: 

Original vector :  10 20 30 30 20 10 10 20
After remove :  10 30 30 10 10

Original vector :  1 2 3 4 5 6 7 8 9 10
After remove_if :  2 4 6 8 10

Este artículo es una contribución de Sachin Bisht . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente. 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *