std::set<Key,Compare,Allocator>::erase
De cppreference.com
(1) | ||
void erase( iterator pos ); |
(hasta C++11) | |
iterator erase( iterator pos ); |
(desde C++11) | |
iterator erase( const_iterator pos ); |
(desde C++11) | |
(2) | ||
void erase( iterator first, iterator last ); |
(hasta C++11) | |
iterator erase( const_iterator first, const_iterator last ); |
(desde C++11) | |
size_type erase( const Key& key ); |
(3) | |
template< class K > size_type erase( K&& x ); |
(4) | (desde C++23) |
Borra del contenedor los elementos especificados.
1) Borra el elemento en la posición
pos
. Solo se proporciona una sobrecarga si iterator
y const_iterator
son el mismo tipo. (desde C++11)2) Borra los elementos en el rango
[first; last)
, que debe ser un rango válido en *this.3) Borra el elemento (si uno existe) con la clave equivalente a
key
.4) Borra el elemento (si uno existe) con la clave que se compara equivalente al valor
x
. Esta sobrecarga solo participa en la resolución de sobrecargas si el id-calificado Compare::is_transparent es válido y denota un tipo, y ni iterator
ni const_iterator
es implícitamente convertible de K
. Permite llamar a esta función sin construir una instancia de Key
.Se invalidan todas las referencias y los iteradores a los elementos eliminados. No se afectan otras referencias e iteradores.
El iterador pos
debe ser válido y desreferenciable. Es por esto que el iterador end() (que es válido, pero no es desreferenciable) no puede usarse como un valor para pos
.
Contenido |
[editar] Parámetros
pos | - | Iterador al elemento a borrar. |
first, last | - | Rango de elementos a borrar. |
key | - | Valor de la clave de los elementos a borrar. |
x | - | Un valor de cualquier tipo que se pueda comparar de forma transparente con una clave que indique los elementos a borrar. |
[editar] Valor de retorno
1-2) (Ninguno) (hasta C++11)Iterador que sigue al último elemento borrado. (desde C++11)
3,4) Número de elementos borrados (
0
o 1
).[editar] Excepciones
1,2) No lanza nada.
3,4) Cualquier excepción lanzada por el objeto
Compare
.[editar] Complejidad
Dada una instancia c
de tipo set
:
1) Constante amortizada.
2) log(c.size()) + std::distance(first, last)
3) log(c.size()) + c.count(key)
4) log(c.size()) + c.count(x)
[editar] Ejemplo
Ejecuta este código
#include <...> #include <iostream> int main() { std::set<int> c = { 1, 2, 3, 4, 1, 2, 3, 4 }; auto imprimir = [&c] { std::cout << "c = { "; for(int n : c) std::cout << n << ' '; std::cout << "}\n"; }; imprimir(); std::cout << "Borrar todos los números nones:\n"; for(auto it = c.begin(); it != c.end(); ) { if(*it % 2 != 0) it = c.erase(it); else ++it; } imprimir(); std::cout << "Borrar 1, se borraron: " << c.erase(1) << '\n'; std::cout << "Borrar 2, se borraron: " << c.erase(2) << '\n'; std::cout << "Borrar 2, se borraron: " << c.erase(2) << '\n'; imprimir(); }
Salida:
c = { 1 2 3 4 } Borrar todos los números nones: c = { 2 4 } Borrar 1, se borraron: 0 Borrar 2, se borraron: 1 Borrar 2, se borraron: 0 c = { 4 }
[editar] 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 2059 | C++11 | La sobrecarga para un const_iterator introdujo una nueva ambigüedad.
|
Se agregó la sobrecarga para iterator .
|
[editar] Véase también
Borra el contenido. (función miembro pública) |