std::list<T,Allocator>:: unique
| (1) | ||
|
void
unique
(
)
;
|
(bis C++20) | |
|
size_type unique
(
)
;
|
(seit C++20)
(constexpr seit C++26) |
|
| (2) | ||
|
template
<
class
BinaryPred
>
void unique ( BinaryPred p ) ; |
(bis C++20) | |
|
template
<
class
BinaryPred
>
size_type unique ( BinaryPred p ) ; |
(seit C++20)
(constexpr seit C++26) |
|
Entfernt alle aufeinanderfolgenden doppelten Elemente aus dem Container. Nur das erste Element in jeder Gruppe gleicher Elemente bleibt erhalten.
Macht nur die Iteratoren und Referenzen auf die entfernten Elemente ungültig.
Inhaltsverzeichnis |
Parameter
| p | - |
binäres Prädikat, das
true
zurückgibt, wenn die Elemente als gleich behandelt werden sollen.
Die Signatur der Prädikatfunktion sollte äquivalent zu folgender sein: bool pred ( const Type1 & a, const Type2 & b ) ;
Obwohl die Signatur keine
const
&
benötigt, darf die Funktion die übergebenen Objekte nicht modifizieren und muss alle Werte der Typen (möglicherweise const)
|
| Typanforderungen | ||
-
BinaryPred
muss die Anforderungen von
BinaryPredicate
erfüllen.
|
||
Rückgabewert
|
(keine) |
(bis C++20) |
|
Die Anzahl der entfernten Elemente. |
(seit C++20) |
Komplexität
Wenn empty() true ist, wird kein Vergleich durchgeführt.
Andernfalls, gegeben N als std:: distance ( begin ( ) , end ( ) ) :
Hinweise
| Feature-Test Makro | Wert | Std | Funktion |
|---|---|---|---|
__cpp_lib_list_remove_return_type
|
201806L
|
(C++20) | Ändern des Rückgabetyps |
Beispiel
#include <iostream> #include <list> std::ostream& operator<< (std::ostream& os, std::list<int> const& container) { for (int val : container) os << val << ' '; return os << '\n'; } int main() { std::list<int> c{1, 2, 2, 3, 3, 2, 1, 1, 2}; std::cout << "Before unique(): " << c; const auto count1 = c.unique(); std::cout << "After unique(): " << c << count1 << " elements were removed\n"; c = {1, 2, 12, 23, 3, 2, 51, 1, 2, 2}; std::cout << "\nBefore unique(pred): " << c; const auto count2 = c.unique([mod = 10](int x, int y) { return (x % mod) == (y % mod); }); std::cout << "After unique(pred): " << c << count2 << " elements were removed\n"; }
Ausgabe:
Before unique(): 1 2 2 3 3 2 1 1 2 After unique(): 1 2 3 2 1 2 3 elements were removed Before unique(pred): 1 2 12 23 3 2 51 1 2 2 After unique(pred): 1 2 23 2 51 2 4 elements were removed
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 1207 | C++98 |
es war unklar, ob Iteratoren
und/oder Referenzen ungültig werden |
macht nur Iteratoren und
Referenzen auf die entfernten Elemente ungültig |
Siehe auch
|
Entfernt aufeinanderfolgende doppelte Elemente in einem Bereich
(Funktionsschablone) |