Namespaces
Variants

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

cppreference.net에서

 
 
 
 
void unique();
(1) (C++11부터)
(C++20까지)
size_type unique();
(C++20부터)
template< class BinaryPredicate >
void unique( BinaryPredicate p );
(2) (C++11부터)
(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 타입은 forward_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 <forward_list>

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

출력:\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

참고 항목

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