std::forward_list<T,Allocator>:: unique
| (1) | ||
|
void
unique
(
)
;
|
(seit C++11)
(bis C++20) |
|
|
size_type unique
(
)
;
|
(seit C++20)
(constexpr seit C++26) |
|
| (2) | ||
|
template
<
class
BinaryPred
>
void unique ( BinaryPred p ) ; |
(seit C++11)
(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 nicht
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 <forward_list> std::ostream& operator<< (std::ostream& os, std::forward_list<int> const& container) { for (int val : container) os << val << ' '; return os << '\n'; } int main() { std::forward_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
Siehe auch
|
Entfernt aufeinanderfolgende doppelte Elemente in einem Bereich
(Funktionsschablone) |