Inhaltsverzeichnis
unique()
#include
<algorithm>
For unique (For first, For last) For unique (For first, For last, Binary pred) For unique (Exec pol, first, For last) For unique (Exec pol, For first, For last, Binary pred) Range ranges::unique (Range r, Binary pred = {}, Proj proj = {}) Range ranges::unique (For first, For last, Binary pred = {}, Proj proj = {})
Entfernt alle Elemente e
aus dem Bereich [first,last),
die mit ihren Vorgänger übereinstimmen
bzw. auf die pred(proj(vorgaenger),proj(e))
zutrifft.
Gleichwertige Elemente über größere Distanzen werden nicht erkannt. Ist der Bereich vorsortiert, werden alle Duplikate entfernt.
Der Algorithmus arbeitet so, dass entfernten Elementen und ihren Nachfolgern nachfolgende Werte zugewiesen werden. Damit ist der Algorithmus nicht für assoziative Container einsetzbar. Die Elemente hinter dem neuen Ende werden nicht wirklich entfernt. Dies kann nur ein Container selbst. Von diesem Algorithmus gibt es einen spezielle Version für Listen, die Elemente wirklich entfernt und ein deutlich besseres Zeitverhalten besitzt.
Parameter
first | Anfang des Bereichs |
last | Ende des Bereichs |
pred | zweistelliges Prädikat (Vorgabe = equal_to ) |
proj | einstelliger Funktor (Vorgabe = std::identity ) |
pol | parallele Ausführungsart |
Ergebnis
Rückgabewert: Iterator j
hinter das Ende des Bereiches mit den eindeutigen Elementen bzw. {j,last}
.
Siehe auch
Beispiel
- unique.cpp
#include <algorithm> #include <iostream> #include <string> int main() { std::string s = "Hallo, Welt"; std::cout << s << '\n'; std::sort(begin(s), end(s)); auto neues_ende = std::unique(begin(s), end(s)); s.erase(neues_ende, s(end)); std::cout << s << '\n'; }