Namespaces
Variants

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

Depuis fr.cppreference.net

 
 
 
 
iterator erase( const_iterator pos );
(1) (depuis C++26)
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 à pos.
2) Supprime les éléments dans l'intervalle [first, last).

Les itérateurs et les références à l'élément effacé sont invalidés. Si l'élément est le dernier élément du conteneur, l'itérateur end() est également invalidé. Les autres références et itérateurs ne sont pas affectés.

L'itérateur pos doit être valide et déréférençable. Ainsi, l'itérateur end() (qui est valide, mais 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 un intervalle vide est une opération nulle.

Paramètres

pos - itérateur vers l'élément à supprimer
first, last - la paire d'itérateurs définissant l'intervalle d'éléments à supprimer

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 un intervalle vide, alors last est retourné.

Complexité

1) Constante.
2) Linéaire par rapport au nombre d'éléments effacés.

De plus, si des blocs actifs deviennent vides d'éléments à la suite de l'appel de fonction, — au pire linéaire par rapport au nombre de blocs d'éléments.

Notes

Lorsque les éléments du conteneur doivent être effacés sur la base d'un prédicat, plutôt que d'itérer sur le conteneur et d'appeler unary erase, la surcharge d'intervalle 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 <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);
}

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)
efface le contenu
(fonction membre publique)