std::set<Key,Compare,Allocator>:: erase
| (1) | ||
|
iterator erase
(
iterator pos
)
;
|
(bis C++23) | |
|
iterator erase
(
iterator pos
)
requires ( ! std:: same_as < iterator, const_iterator > ) ; |
(seit C++23)
(constexpr seit C++26) |
|
|
iterator erase
(
const_iterator pos
)
;
|
(2) |
(seit C++11)
(constexpr seit C++26) |
| (3) | ||
|
iterator erase
(
iterator first, iterator last
)
;
|
(bis C++11) | |
|
iterator erase
(
const_iterator first, const_iterator last
)
;
|
(seit C++11)
(constexpr seit C++26) |
|
|
size_type erase
(
const
Key
&
key
)
;
|
(4) | (constexpr seit C++26) |
|
template
<
class
K
>
size_type erase ( K && x ) ; |
(5) |
(seit C++23)
(constexpr seit C++26) |
Entfernt bestimmte Elemente aus dem Container.
|
Nur eine Überladung wird bereitgestellt, wenn
|
(seit C++11) |
[
first
,
last
)
, der ein gültiger Bereich in
*
this
sein muss.
Compare
transparent
ist und weder
iterator
noch
const_iterator
implizit von
K
konvertierbar sind. Dies ermöglicht den Aufruf dieser Funktion ohne eine Instanz von
Key
zu konstruieren.
Referenzen und Iteratoren zu den gelöschten Elementen werden ungültig. Andere Referenzen und Iteratoren sind nicht betroffen.
Der Iterator pos muss dereferenzierbar sein. Daher kann der end() -Iterator (der gültig ist, aber nicht dereferenziert werden kann) nicht als Wert für pos verwendet werden.
Inhaltsverzeichnis |
Parameter
| pos | - | Iterator zum zu entfernenden Element |
| first, last | - | Das Iteratorpaar, das den Bereich der zu entfernenden Elemente definiert |
| key | - | Schlüsselwert der zu entfernenden Elemente |
| x | - | Ein Wert beliebigen Typs, der transparent mit einem Schlüssel verglichen werden kann, der die zu entfernenden Elemente bezeichnet |
Rückgabewert
Ausnahmen
Compare
-Objekt ausgelösten Ausnahmen.
Komplexität
Gegeben eine Instanz
c
von
set
:
Hinweise
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_associative_heterogeneous_erasure
|
202110L
|
(C++23) | Heterogenes Löschen in assoziativen Containern und ungeordneten assoziativen Containern ; Überladung ( 5 ) |
Beispiel
#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 << "Alle ungeraden Zahlen löschen:\n"; for (auto it = c.begin(); it != c.end();) { if (*it % 2 != 0) it = c.erase(it); else ++it; } print(); std::cout << "1 löschen, gelöschte Anzahl: " << c.erase(1) << '\n'; std::cout << "2 löschen, gelöschte Anzahl: " << c.erase(2) << '\n'; std::cout << "2 löschen, gelöschte Anzahl: " << c.erase(2) << '\n'; print(); }
Ausgabe:
c = { 1 2 3 4 }
Alle ungeraden Zahlen löschen:
c = { 2 4 }
1 löschen, gelöschte Anzahl: 0
2 löschen, gelöschte Anzahl: 1
2 löschen, gelöschte Anzahl: 0
c = { 4 }
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht |
Korrigiertes Verhalten
|
|---|---|---|---|
| LWG 130 | C++98 |
der Rückgabetyp der Überladungen
(
1
)
und
(
3
)
war
void
(es ist nicht
konsistent mit der
erase()
-Anforderung für Sequenzcontainer)
|
korrigiert zu
iterator
|
| LWG 2059 | C++11 | Ersetzen der Überladung ( 1 ) durch Überladung ( 2 ) führte neue Mehrdeutigkeit ein | Überladung ( 1 ) wieder hinzugefügt |
Siehe auch
|
löscht den Inhalt
(öffentliche Elementfunktion) |