forward_list::remove() y forward_list::remove_if() en C++ STL

La lista de reenvío en STL implementa una lista enlazada individualmente. La lista de reenvío se introdujo en C++ 11 y es más útil que otros contenedores en las operaciones de inserción, eliminación y movimiento (como ordenar) y permite la inserción y eliminación constante de elementos en el tiempo. Se diferencia de la lista por el hecho de que la lista de reenvío realiza un seguimiento de la ubicación solo del elemento siguiente, mientras que la lista realiza un seguimiento de los elementos anterior y siguiente.

reenviar_lista::eliminar()

La función Remove() se utiliza para eliminar todos los valores de la lista de reenvío que corresponden al valor dado como parámetro de la función. Esta función se encuentra en el archivo de encabezado <forward_list> .
Sintaxis: 

forwardlistname.remove(value)

Parámetros: El valor del elemento a eliminar se pasa como parámetro.

Resultado: Elimina todos los elementos del contenedor iguales al valor pasado como parámetro.

Complejidad temporal: Lineal en tamaño contenedor.

Ejemplos: 

Input :  forward_list forwardlist{1, 2, 3, 4, 5};
         forwardlist.remove(4);
Output : 1, 2, 3, 5

Input :  forward_list forwardlist{1, 2, 2, 2, 5, 6};
         forwardlist.remove(2);
Output : 1, 5, 6

Errores y excepciones:

  • Muestra un error si el valor pasado no coincide con el tipo de lista de reenvío.
  • No muestra ninguna garantía de lanzamiento de excepción si la comparación entre el valor y los elementos de la función de lista de reenvío no arroja ninguna excepción.

CPP

// CPP program to illustrate
// Implementation of remove() function
#include <forward_list>
#include <iostream>
using namespace std;
 
// Driver Code
int main()
{
    forward_list<int> myforwardlist{ 1, 2, 2, 2, 5, 6, 7 };
    myforwardlist.remove(2);
    for (auto it = myforwardlist.begin();
         it != myforwardlist.end(); ++it)
        cout << ' ' << *it;
    return 0;
}
Producción

 1 5 6 7

reenviar_lista::remove_if()

La función remove_if() se utiliza para eliminar todos los valores de la lista que se corresponden con el predicado o la condición dada como parámetro de la función. La función itera a través de cada miembro del contenedor de la lista y elimina todos los elementos que devuelven verdadero para el predicado. Esta función se encuentra en el archivo de encabezado <forward_list> .
Sintaxis: 

forwardlistname.remove_if(predicate)

Parámetros: el predicado en forma de puntero de función u objeto de función se pasa como parámetro.

Resultado: elimina todos los elementos del contenedor que devuelven verdadero para el predicado.

Complejidad temporal: Lineal en tamaño contenedor.

Ejemplos: 

Input  : forward_list forwardlist{1, 2, 3, 4, 5};
         forwardlist.remove_if(odd);
Output : 2, 4

Input  : forward_list forwardlist{1, 2, 2, 2, 5, 6, 7};
         forwardlist.remove_if(even);
Output : 1, 5, 7

Errores y excepciones: no muestra ninguna garantía de lanzamiento de excepción si la función de función de predicado no lanza ninguna excepción.

CPP

// CPP program to illustrate implementation
// of remove_if() function
#include <forward_list>
#include <iostream>
using namespace std;
 
// Predicate implemented as a function
bool even(const int& value) { return (value % 2) == 0; }
 
// Driver Code
int main()
{
    forward_list<int> myforwardlist{ 1, 2, 2, 2, 5, 6, 7 };
    myforwardlist.remove_if(even);
    for (auto it = myforwardlist.begin();
         it != myforwardlist.end(); ++it)
        cout << ' ' << *it;
    return 0;
}
Producción

 1 5 7

Aplicación de remove_if(): dada una lista de números enteros, elimine todos los números primos de la lista e imprima la lista. 

Input  : 2, 4, 6, 7, 9, 11, 13
Output : 4, 6, 9

CPP

// CPP program to illustrate
// Application of remove_if() function
#include <forward_list>
#include <iostream>
using namespace std;
 
// Predicate implemented as a function
bool prime(const int& value)
{
    int i;
    for (i = 2; i < value; i++) {
        if (value % i == 0) {
            return false;
            ;
            break;
        }
    }
    if (value == i) {
        return true;
        ;
    }
}
 
// Driver Code
int main()
{
    forward_list<int> myforwardlist{
        2, 4, 6, 7, 9, 11, 13
    };
    myforwardlist.remove_if(prime);
    for (auto it = myforwardlist.begin();
         it != myforwardlist.end(); ++it)
        cout << ' ' << *it;
    return 0;
}
Producción

 4 6 9

Veamos las diferencias en forma tabular -:

  reenviar_lista::eliminar() reenviar_lista::remove_if() 
1. Se utiliza para sacar del contenedor todos los elementos que comparan igual a val. Se utiliza para eliminar del contenedor todos los elementos para los que Predicate pred devuelve verdadero.
2.

Su sintaxis es -:

eliminar (const value_type& val);

Su sintaxis es -:

remove_if (Predicado pred);

3. Su valor de retorno es de tipo void. Su valor de retorno es de tipo void.
4. Toma un parámetro que es el valor de los elementos a eliminar. Toma un parámetro que es predicado unario 
5. Su complejidad es lineal. Su complejidad es lineal.

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 AyushSaxena 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 *