std::set<Key,Compare,Allocator>:: erase
| (1) | ||
|
iterator erase
(
iterator pos
)
;
|
(jusqu'en C++23) | |
|
iterator erase
(
iterator pos
)
requires ( ! std:: same_as < iterator, const_iterator > ) ; |
(depuis C++23)
(constexpr depuis C++26) |
|
|
iterator erase
(
const_iterator pos
)
;
|
(2) |
(depuis C++11)
(constexpr depuis C++26) |
| (3) | ||
|
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) |
|
|
size_type erase
(
const
Key
&
key
)
;
|
(4) | (constexpr depuis C++26) |
|
template
<
class
K
>
size_type erase ( K && x ) ; |
(5) |
(depuis C++23)
(constexpr depuis C++26) |
Supprime les éléments spécifiés du conteneur.
|
Une seule surcharge est fournie si
|
(depuis C++11) |
[
first
,
last
)
, qui doit être un intervalle valide dans
*
this
.
Compare
est
transparent
, et si ni
iterator
ni
const_iterator
ne sont implicitement convertibles à partir de
K
. Cela permet d'appeler cette fonction sans construire une instance de
Key
.
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 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 .
Table des matières |
Paramètres
| pos | - | itérateur vers l'élément à supprimer |
| first, last | - | la paire d'itérateurs définissant la plage des éléments à supprimer |
| key | - | valeur de clé des éléments à supprimer |
| x | - | une valeur de tout type pouvant être comparée de manière transparente avec une clé désignant les éléments à supprimer |
Valeur de retour
Exceptions
Compare
.
Complexité
Étant donné une instance
c
de
set
:
Notes
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_associative_heterogeneous_erasure
|
202110L
|
(C++23) | Effacement hétérogène dans les conteneurs associatifs et les conteneurs associatifs non ordonnés ; surcharge ( 5 ) |
Exemple
#include <set> #include <iostream> int main() { std::set<int> c = {1, 2, 3, 4, 1, 2, 3, 4}; auto print = [&c] { std::cout << "c = { "; for (int n : c) std::cout << n << ' '; std::cout << "}\n"; }; print(); std::cout << "Supprimer tous les nombres impairs:\n"; for (auto it = c.begin(); it != c.end();) { if (*it % 2 != 0) it = c.erase(it); else ++it; } print(); std::cout << "Supprimer 1, nombre supprimé: " << c.erase(1) << '\n'; std::cout << "Supprimer 2, nombre supprimé: " << c.erase(2) << '\n'; std::cout << "Supprimer 2, nombre supprimé: " << c.erase(2) << '\n'; print(); }
Sortie :
c = { 1 2 3 4 }
Erase all odd numbers:
c = { 2 4 }
Erase 1, erased count: 0
Erase 2, erased count: 1
Erase 2, erased count: 0
c = { 4 }
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 publié |
Comportement corrigé
|
|---|---|---|---|
| LWG 130 | C++98 |
le type de retour des surcharges
(
1
)
et
(
3
)
était
void
(ce n'est pas
cohérent avec l'exigence
erase()
sur les conteneurs de séquence)
|
corrigé en
iterator
|
| LWG 2059 | C++11 | le remplacement de la surcharge ( 1 ) par la surcharge ( 2 ) a introduit une nouvelle ambiguïté | a rajouté la surcharge ( 1 ) à nouveau |
Voir aussi
|
efface le contenu
(fonction membre publique) |