Namespaces
Variants

std::list<T,Allocator>::unique

cppreference.net에서

 
 
 
 
void unique();
(1) (C++20까지)
size_type unique();
(C++20부터)
template< class BinaryPredicate >
void unique( BinaryPredicate p );
(2) (C++20까지)
template< class BinaryPredicate >
size_type unique( BinaryPredicate p );
(C++20부터)

컨테이너에서 모든 연속된 중복 요소를 제거합니다. 각 동일 요소 그룹의 첫 번째 요소만 남습니다.

제거된 요소에 대한 반복자와 참조만 무효화합니다.

1) 요소를 비교하기 위해 operator==를 사용합니다.
2) 요소를 비교하기 위해 p를 사용합니다.

해당 비교자가 동치 관계를 성립하지 않으면 동작이 정의되지 않습니다.

매개변수

p - 요소들이 동등하게 취급되어야 할 경우 ​ true 를 반환하는 이항 predicate.

predicate 함수의 시그니처는 다음과 동일해야 합니다:

bool pred ( const Type1 & a, const Type2 & b ) ;

시그니처가 반드시 const & 를 가질 필요는 없지만, 함수는 전달된 객체를 수정해서는 안 되며 값 범주 와 무관하게 (가능하면 const인) Type1 과 Type2 타입의 모든 값을 수용할 수 있어야 합니다 (따라서 Type1 & 는 허용되지 않으며 , Type1 또한 Type1 에 대해 이동이 복사와 동등하지 않는 한 허용되지 않습니다 (C++11부터) ).
Type1 과 Type2 타입은 list < T,Allocator > :: const_iterator 타입의 객체가 역참조된 후 두 타입으로 암시적으로 변환될 수 있어야 합니다. ​

타입 요구사항
-
BinaryPred 는 BinaryPredicate 요구사항을 충족해야 합니다.

반환값

(없음)

(until C++20)

제거된 요소의 수.

(since C++20)

복잡도

만약 empty() 가 true 인 경우, 비교가 수행되지 않습니다.

그렇지 않으면, N 을 std:: distance ( begin ( ) , end ( ) ) 로 주어진다고 가정합니다:

1) 정확히 N-1 번의 비교를 operator == 를 사용하여 수행합니다.
2) 정확히 N-1 번의 술어 p 적용.

참고 사항

기능 테스트 매크로 값 표준 기능
__cpp_lib_list_remove_return_type 201806L (C++20) 반환 타입 변경

예제

#include <iostream>
#include <list>

std::ostream& operator<< (std::ostream& os, const std::list<int>& 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;
    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";
}

출력:

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

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 1207 C++98 반복자 및/또는 참조가 무효화되는지 여부가
명확하지 않았음
제거된 요소에 대한 반복자와
참조만 무효화됨

같이 보기

범위에서 연속된 중복 요소를 제거합니다
(함수 템플릿 & 알고리즘 함수 객체)