Jest przykładem na cppreference jak używać std::unique
usunąć kolejne spacje z łańcucha:std :: unikalny przykład bez relacji równoważności (usunięcie kolejnych spacji)
std::string s = "wanna go to space?";
auto end = std::unique(s.begin(), s.end(), [](char l, char r){
return std::isspace(l) && std::isspace(r) && l == r;
});
// s now holds "wanna go to space?xxxxxxxx", where 'x' is indeterminate
std::cout << std::string(s.begin(), end) << '\n';
Jednak w sekcji Wymagania dla unikalny to stany
Elementy są porównywane przy użyciu podanego predykatu binarnego p. Zachowanie jest niezdefiniowane, jeśli nie jest relacją równoważności.
Moje pytanie brzmi: czy podany przykład jest ważny? Predykat wyraźnie nie jest refleksyjny (dwa znaki "n" są nierównomierne), a zatem nie jest równoważny.
Jest to równoważność. Wszystkie nie-spacje są unikalne. – stark
To jest refleksyjność, która jest zepsuta ("a ~ a"), symetria jest poprawna ('a ~ b <=> b ~ a') – Jarod42
@ Jarod42: Tak, właśnie to poprawiłem, miałem na myśli refleksyjną – Andre