std::list<T,Allocator>:: erase
| (1) | ||
|
iterator erase
(
iterator pos
)
;
|
(hasta C++11) | |
|
iterator erase
(
const_iterator pos
)
;
|
(desde C++11)
(constexpr desde C++26) |
|
| (2) | ||
|
iterator erase
(
iterator first, iterator last
)
;
|
(hasta C++11) | |
|
iterator erase
(
const_iterator first, const_iterator last
)
;
|
(desde C++11)
(constexpr desde C++26) |
|
Borra los elementos especificados del contenedor.
[
first
,
last
)
.
Las referencias e iteradores a los elementos eliminados quedan invalidados. Otras referencias e iteradores no se ven afectados.
El iterador pos debe ser válido y dereferenciable. Por lo tanto, el iterador end() (que es válido, pero no es dereferenciable) no puede usarse como valor para pos .
El iterador first no necesita ser desreferenciable si first == last : eliminar un rango vacío es una operación nula.
Contenidos |
Parámetros
| pos | - | iterador al elemento a eliminar |
| first, last | - | el par de iteradores que define el rango de elementos a eliminar |
Valor de retorno
Iterador que sigue al último elemento eliminado.
[
first
,
last
)
es un rango vacío, entonces se devuelve
last
.
Complejidad
Notas
Cuando los elementos de un contenedor necesitan ser eliminados basándose en un predicado, en lugar de iterar el contenedor y llamar al borrado unario
erase
, generalmente se utiliza la sobrecarga de rango de iteradores con
std::remove()/std::remove_if()
para minimizar el número de movimientos de los elementos restantes (no eliminados), — este es el idiom erase-remove.
std::erase_if()
reemplaza el idiom erase-remove.
(desde C++20)
Ejemplo
#include <list> #include <iostream> #include <iterator> void print_container(const std::list<int>& c) { for (int i : c) std::cout << i << ' '; std::cout << '\n'; } int main() { std::list<int> c{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; print_container(c); c.erase(c.begin()); print_container(c); std::list<int>::iterator range_begin = c.begin(); std::list<int>::iterator range_end = c.begin(); std::advance(range_begin, 2); std::advance(range_end, 5); c.erase(range_begin, range_end); print_container(c); // Eliminar todos los números pares for (std::list<int>::iterator it = c.begin(); it != c.end();) { if (*it % 2 == 0) it = c.erase(it); else ++it; } print_container(c); }
Salida:
0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 6 7 8 9 1 7 9
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 151 | C++98 |
first
se requería que fuera dereferenciable, lo que
hacía que el comportamiento de borrar un
list
vacío fuera indefinido
|
no requerido si
first == last |
Véase también
|
elimina todos los elementos que cumplen criterios específicos
(plantilla de función) |
|
|
borra el contenido
(función miembro pública) |