Namespaces
Variants

std::inplace_vector<T,N>::erase

De es.cppreference.net

 
 
 
 
constexpr iterator erase( const_iterator pos );
(1) (desde C++26)
constexpr 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 (incluyendo el iterador end()) y las referencias a los elementos en o después del punto de borrado se invalidan.

El iterador pos debe ser válido y desreferenciable. Por lo tanto, el iterador end() (que es válido, pero no es desreferenciable) no puede usarse como valor para pos.

El iterador first no necesita ser desreferenciable si first == last: borrar un rango vacío es una operación nula.

Parámetros

pos - iterador al elemento a eliminar
first, last - el par de iteradores que define el rango de elementos a eliminar
Requisitos de tipo
-
Si T no es MoveAssignable , el comportamiento es indefinido.

Valor de retorno

Iterador que sigue al último elemento eliminado.

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

Excepciones

No lanza a menos que se lance una excepción por el operador de asignación de T .

Complejidad

Lineal: el número de llamadas al destructor de T es igual al número de elementos borrados, el operador de asignación de T se llama un número de veces igual al número de elementos en el vector después de los elementos borrados.

Notas

Cuando los elementos del contenedor deben eliminarse basándose en un predicado, en lugar de iterar el contenedor y llamar a unario erase, generalmente se usa la sobrecarga de rango de iterador con std::remove()/std::remove_if() para minimizar el número de movimientos de los elementos restantes (no eliminados), — esto es el idiom erase-remove. std::erase_if() reemplaza el idiom erase-remove.

Ejemplo

#include <inplace_vector>
#include <print>

int main()
{
    std::inplace_vector<int, 26> 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

elimina todos los elementos que cumplen criterios específicos
(plantilla de función)
limpia el contenido
(función miembro pública)