On this page
std::forward_list<T,Allocator>::unique
(1) | ||
|
(since C++11) (until C++20) |
|
|
(since C++20) | |
(2) | ||
|
(since C++11) (until C++20) |
|
|
(since C++20) |
Removes all consecutive duplicate elements from the container. Only the first element in each group of equal elements is left. Invalidates only the iterators and references to the removed elements.
operator==
to compare the elements.
p
to compare the elements.
The behavior is undefined if the corresponding comparator does not establish an equivalence relation.
Parameters
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 |
Type requirements | ||
-BinaryPredicate must meet the requirements of BinaryPredicate. |
Return value
(none) |
(until C++20) |
The number of elements removed. |
(since C++20) |
Complexity
If empty()
is true
, no comparison is performed.
Otherwise, given \(\scriptsize N\)N as std::distance(begin(), end())
:
operator==
.
p
.
Notes
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_list_remove_return_type |
201806L | (C++20) | Change the return type |
Example
#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";
}
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
See also
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