std::list::remove, remove_if
De cppreference.com
<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 |
| 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
Ejecuta este código
#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) |