(1) | ||
void unique(); | (since C++11) (until C++20) | |
size_type unique(); | (since C++20) | |
(2) | ||
template< class BinaryPredicate > void unique( BinaryPredicate p ); | (since C++11) (until C++20) | |
template< class BinaryPredicate > size_type unique( BinaryPredicate p ); | (since C++20) |
Removes all consecutive duplicate elements from the container. Only the first element in each group of equal elements is left. The behavior is undefined if the selected comparator does not establish an equivalence relation.
operator==
to compare the elements.p
to compare the elements.p | - | binary predicate which returns true if the elements should be treated as equal. The signature of the predicate function should be equivalent to the following:
While the signature does not need to have |
(none). | (until C++20) |
The number of elements removed. | (since C++20) |
Exactly std::distance(begin(), end()) - 1
comparisons of the elements, if the container is not empty. Otherwise, no comparison is performed.
Feature-test macro | Value | Std | Comment |
---|---|---|---|
__cpp_lib_list_remove_return_type | 201806L | (C++20) | Change the return type |
#include <iostream> #include <forward_list> auto print = [](auto remark, auto const& container) { std::cout << remark; for (auto const& val : container) std::cout << ' ' << val; std::cout << '\n'; }; int main() { std::forward_list<int> c = {1, 2, 2, 3, 3, 2, 1, 1, 2}; print("Before unique():", c); const auto count1 = c.unique(); print("After unique(): ", c); std::cout << count1 << " elements were removed\n"; c = {1, 2, 12, 23, 3, 2, 51, 1, 2, 2}; print("Before unique(pred):", c); const auto count2 = c.unique([mod=10](int x, int y) { return (x % mod) == (y % mod); }); print("After unique(pred): ", c); std::cout << count2 << " elements were removed\n"; }
Output:
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
removes consecutive duplicate elements in a range (function template) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/forward_list/unique