std::forward_list<T,Allocator>::unique
| (1) | ||
void unique(); |
(seit C++11) (bis C++20) |
|
| size_type unique(); |
(seit C++20) | |
| (2) | ||
template< class BinaryPredicate > void unique( BinaryPredicate p ); |
(seit C++11) (bis C++20) |
|
| template< class BinaryPredicate > size_type unique( BinaryPredicate p ); |
(seit C++20) | |
Entfernt alle aufeinanderfolgenden doppelten Elemente aus dem Container. Nur das erste Element jeder Gruppe von gleichen Elementen bleibt erhalten. Macht nur die Iteratoren und Referenzen auf die entfernten Elemente ungültig.
Das Verhalten ist undefiniert, wenn der entsprechende Komparator keine Äquivalenzrelation herstellt.
Inhalt |
[bearbeiten] Parameter
| p | - | binäre Prädikatfunktion, die true zurückgibt, wenn die Elemente als gleich behandelt werden sollen. Die Signatur der Prädikatfunktion sollte äquivalent zur folgenden sein: bool pred(const Type1 &a, const Type2 &b); Obwohl die Signatur nicht zwingend const & haben muss, darf die Funktion die ihr übergebenen Objekte nicht modifizieren und muss alle Werte vom Typ (möglicherweise const) |
| Typanforderungen | ||
-BinaryPredicate muss die Anforderungen an einen BinaryPredicate erfüllen. | ||
[bearbeiten] Rückgabewert
|
(keine) |
(bis C++20) |
|
Die Anzahl der entfernten Elemente. |
(seit C++20) |
[bearbeiten] Komplexität
Wenn empty() true ist, wird keine Vergleichung durchgeführt.
Andernfalls, gegeben N als std::distance(begin(), end())
[bearbeiten] Anmerkungen
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_list_remove_return_type |
201806L |
(C++20) | Änderung des Rückgabetyps |
[bearbeiten] 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
[bearbeiten] Siehe auch
| Entfernt aufeinanderfolgende doppelte Elemente in einem Bereich (Funktionstemplate) |