Namespaces
Variants

std::hive<T,Allocator>::erase

De es.cppreference.net

 
 
 
 
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.

1) Elimina el elemento en pos.
2) Elimina los elementos en el rango [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.

1) Si pos se refiere al último elemento, entonces se devuelve el iterador end().
2) Si last == end() antes de la eliminación, entonces se devuelve el iterador end() actualizado.
Si [first, last) es un rango vacío, entonces se devuelve last.

Complejidad

1) Constante.
2) Lineal en el número de elementos borrados.

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)