(C++17) | ||||
| Sequence | ||||
(C++11) | ||||
(C++26) | ||||
(C++26) | ||||
(C++11) | ||||
| Associative | ||||
| Unordered associative | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
| Adaptors | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
| Views | ||||
(C++20) | ||||
(C++23) | ||||
| Tables | ||||
| Iterator invalidation | ||||
| Member function table | ||||
| Non-member function table |
| Member functions | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Non-member functions | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Deduction guides(C++17) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| (1) | ||
void unique(); | (until C++20) | |
size_type unique(); | (since C++20) (constexpr since C++26) | |
| (2) | ||
template<class BinaryPred> void unique( BinaryPred p); | (until C++20) | |
template<class BinaryPred> size_type unique( BinaryPred p); | (since C++20) (constexpr since C++26) | |
Removes allconsecutive 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.
Contents |
| 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: bool pred(const Type1&a,const Type2&b); While the signature does not need to haveconst&, the function must not modify the objects passed to it and must be able to accept all values of type (possibly const) |
| Type requirements | ||
-BinaryPred must meet the requirements ofBinaryPredicate. | ||
(none) | (until C++20) |
The number of elements removed. | (since C++20) |
Ifempty() istrue, no comparison is performed.
Otherwise, given\(\scriptsize N\)N asstd::distance(begin(), end()):
| Feature-test macro | Value | Std | Feature |
|---|---|---|---|
__cpp_lib_list_remove_return_type | 201806L | (C++20) | Change the return type |
#include <iostream>#include <list> std::ostream& operator<<(std::ostream& os,std::list<int>const& container){for(int val: container) os<< val<<' ';return os<<'\n';} int main(){std::list<int> c{1,2,2,3,3,2,1,1,2};std::cout<<"Before unique(): "<< c;constauto 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; constauto 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 2After unique(): 1 2 3 2 1 23 elements were removed Before unique(pred): 1 2 12 23 3 2 51 1 2 2After unique(pred): 1 2 23 2 51 24 elements were removed
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 1207 | C++98 | it was unclear whether iterators and/or references will be invalidated | only invalidates iterators and references to the removed elements |
| removes consecutive duplicate elements in a range (function template)[edit] |