std::hive<T,Allocator>::erase
iterator erase( const_iterator pos );
|
(1) | (desde C++26) |
iterator erase( const_iterator first, const_iterator last );
|
(2) | (desde C++26) |
Borra los elementos especificados del contenedor.
pos.[first, last).Los iteradores y las referencias al elemento borrado se invalidan. Si el elemento es el último elemento del contenedor, el iterador end() también se invalida. Otras referencias e iteradores no se ven afectados.
El iterador pos debe ser válido y desreferenciable. Por lo tanto, el iterador end() (que es válido, pero no desreferenciable) no puede ser usado como valor para pos.
El iterador first no necesita ser desreferenciable si first == last: borrar un rango vacío no tiene efecto.
Parámetros
| pos | - | iterador al elemento a eliminar |
| first, last | - | el par de iteradores que definen el rango de elementos a eliminar |
Valor de retorno
Iterador después del último elemento eliminado.
pos se refiere al último elemento, entonces se devuelve el iterador end().last == end() antes de la eliminación, entonces se devuelve el iterador end() actualizado.[first, last) es un rango vacío, entonces se devuelve last.Complejidad
Además, si algún bloque activo se queda vacío de elementos como resultado de la llamada a la función, — a lo sumo lineal en el número de bloques de elementos.
Notas
Cuando los elementos del contenedor necesitan ser borrados según un predicado, en lugar de iterar el contenedor y llamar al unario erase, la sobrecarga de rango de iteradores se usa generalmente con std::remove()/std::remove_if() para minimizar el número de movimientos de los elementos restantes (no eliminados), — este es el idiom de borrar y eliminar (erase-remove idiom).
std::erase_if() reemplaza el idiom de borrar y eliminar.
Ejemplo
#include <hive>
#include <print>
int main()
{
std::hive v{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
std::println("{}", v);
v.erase(v.begin());
std::println("{}", v);
v.erase(std::next(v.begin(), 2), std::next(v.begin(), 5));
std::println("{}", v);
// Erase all even numbers
for (auto it{v.begin()}; it != v.end();)
if (*it % 2 == 0)
it = v.erase(it);
else
++it;
std::println("{}", v);
}
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]
Véase también
| borra todos los elementos que cumplen criterios específicos (plantilla de función) | |
| limpia el contenido (función miembro pública) |