Espacios de nombres
Variantes

std::list::remove, remove_if

De cppreference.com

[edit template]
 
 
 
 
<tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody>
(1)
void remove( const T& value );
(hasta C++20)
size_type remove( const T& value );
(desde C++20)
(2)
template< class UnaryPredicate > void remove_if( UnaryPredicate p );
(hasta C++20)
template< class UnaryPredicate > size_type remove_if( UnaryPredicate p );
(desde C++20)

Elimina todos los elementos que satisfacen un criterio específico. Invalida solo los iteradores y las referencias a los elementos eliminados.

1) Elimina todos los elementos que son iguales a value (usando operator==).
2) Elimina todos los elementos para los cuales el predicado p devuelve true.

Parámetros

value - El valor de los elementos a eliminar.
p - Predicado unario que devuelve ​true si el elemento debe eliminarse.

La expresión p(v) debe ser convertible a bool para cada argumento v de tipo (posiblemente const) T, independientemente de la categoría de valor, y no debe modificar v. Por lo tanto, no se admite un parámetro de tipo T&, ni es T a menos que para T una operación de movimiento sea equivalente a una copia (desde C++11). ​

Requisitos de tipo
-
UnaryPredicate debe satisfacer los requisitos de Predicado.

Valor de retorno

(Ninguno)

(hasta C++20)

La cantidad de elementos eliminados.

(desde C++20)

Complejidad

Dada N como std::distance(begin(), end()):

1) Exactamente N comparaciones usando operator==.
2) Exactamente N aplicaciones del predicado p.

Notas

Macro de Prueba de característica Valor Estándar Comentario
__cpp_lib_list_remove_return_type 201806L (C++20) Cambiar el tipo de retorno.

Ejemplo

#include <list>
#include <iostream>

int main()
{
    std::list<int> l = {1, 100, 2, 3, 10, 1, 11, -1, 12};

    auto count1 = l.remove(1);
    std::cout << count1 << " elementos igual a 1 se eliminaron\n";

    auto count2 = l.remove_if([](int n){ return n > 10; });
    std::cout << count2 << " elementos mayores a 10 se eliminaron\n";

    std::cout << "Finalmente, la lista contiene: ";
    for (int n : l)
        std::cout << n << ' ';
    std::cout << '\n';
}

Salida:

2 elementos igual a 1 se eliminaron
3 elementos mayores a 10 se eliminaron
Finalmente, la lista contiene: 2 3 10 -1

Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 1207 C++98 No estaba claro si los iteradores
y/o las referencias se invalidaban.
Solo invalida iteradores y
referencias a los elementos eliminados.

Véase también

Elimina elementos que satisfacen un criterio específico.
(plantilla de función) [editar]