Namespaces
Variants

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

From cppreference.net

constexpr iterator erase ( const_iterator pos ) ;
(1) (depuis C++26)
constexpr iterator erase ( const_iterator first, const_iterator last ) ;
(2) (depuis C++26)

Efface les éléments spécifiés du conteneur.

1) Supprime l'élément à la position pos .
2) Supprime les éléments dans l'intervalle [ first , last ) .

Les itérateurs (y compris l'itérateur end() ) et les références aux éléments situés au niveau ou après le point de l'effacement sont invalidés.

L'itérateur pos doit être valide et déréférençable. Ainsi l'itérateur end() (qui est valide, mais n'est pas déréférençable) ne peut pas être utilisé comme valeur pour pos .

L'itérateur first n'a pas besoin d'être déréférençable si first == last : effacer une plage vide est une opération sans effet.

Table des matières

Paramètres

pos - itérateur vers l'élément à supprimer
first, last - la paire d'itérateurs définissant l'intervalle des éléments à supprimer
Exigences de type
-
Si T n'est pas MoveAssignable , le comportement est indéfini.

Valeur de retour

Itérateur suivant le dernier élément supprimé.

1) Si pos fait référence au dernier élément, alors l'itérateur end() est retourné.
2) Si last == end ( ) avant la suppression, alors l'itérateur end() mis à jour est retourné.
Si [ first , last ) est une plage vide, alors last est retourné.

Exceptions

Ne lance pas sauf si une exception est levée par l'opérateur d'assignation de T .

Complexité

Linéaire : le nombre d'appels au destructeur de T est le même que le nombre d'éléments effacés, l'opérateur d'affectation de T est appelé un nombre de fois égal au nombre d'éléments dans le vecteur après les éléments effacés.

Notes

Lorsque des éléments de conteneur doivent être supprimés selon un prédicat, plutôt que de parcourir le conteneur et d'appeler l'opération unaire erase , la surcharge de plage d'itérateurs est généralement utilisée avec std::remove()/std::remove_if() pour minimiser le nombre de déplacements des éléments restants (non supprimés) — c'est l'idiome erase-remove. std::erase_if() remplace l'idiome erase-remove.

Exemple

#include <inplace_vector>
#include <print>
int main()
{
    std::inplace_vector<int, 10> v{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    std::println("{}", v);
    v.erase(v.begin());
    std::println("{}", v);
    v.erase(v.begin() + 2, v.begin() + 5);
    std::println("{}", v);
    // Supprimer tous les nombres pairs
    for (std::inplace_vector<int, 10>::iterator it{v.begin()}; it != v.end();)
        if (*it % 2 == 0)
            it = v.erase(it);
        else
            ++it;
    std::println("{}", v);
}

Sortie :

[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]

Voir aussi

efface tous les éléments satisfaisant des critères spécifiques
(modèle de fonction)
vide le contenu
(fonction membre publique)