Namespaces
Variants

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

From cppreference.net

(1)
iterator erase ( iterator pos ) ;
(jusqu'en C++11)
iterator erase ( const_iterator pos ) ;
(depuis C++11)
(constexpr depuis C++26)
(2)
iterator erase ( iterator first, iterator last ) ;
(jusqu'en C++11)
iterator erase ( const_iterator first, const_iterator last ) ;
(depuis C++11)
(constexpr 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 références et itérateurs vers les éléments supprimés sont invalidés. 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 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 : supprimer 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

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 mis à jour end() est retourné.
Si [ first , last ) est une plage vide, alors last est retourné.

Complexité

1) Constante.
2) Linéaire en fonction de la distance entre first et last .

Notes

Lorsque des éléments de conteneur doivent être effacés selon un prédicat, plutôt que de parcourir le conteneur et d'appeler l'effacement 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 effacer-supprimer. std::erase_if() remplace l'idiome effacer-supprimer. (depuis C++20)

Exemple

#include <list>
#include <iostream>
#include <iterator>
void print_container(const std::list<int>& c)
{
    for (int i : c)
        std::cout << i << ' ';
    std::cout << '\n';
}
int main()
{
    std::list<int> c{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    print_container(c);
    c.erase(c.begin());
    print_container(c);
    std::list<int>::iterator range_begin = c.begin();
    std::list<int>::iterator range_end = c.begin();
    std::advance(range_begin, 2);
    std::advance(range_end, 5);
    c.erase(range_begin, range_end);
    print_container(c);
    // Effacer tous les nombres pairs
    for (std::list<int>::iterator it = c.begin(); it != c.end();)
    {
        if (*it % 2 == 0)
            it = c.erase(it);
        else
            ++it;
    }
    print_container(c);
}

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

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement tel que publié Comportement correct
LWG 151 C++98 first devait être déréférençable, ce qui
rendait le comportement de la suppression d'une list vide indéfini
non requis si
first == last

Voir aussi

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