다음을 통해 공유


unique (<algorithm>)

지정 된 범위에서 서로 인접 한 중복 요소를 제거 합니다.

template<class ForwardIterator>
   ForwardIterator unique(
      ForwardIterator _First, 
      ForwardIterator _Last
   );
template<class ForwardIterator, class Predicate>
   ForwardIterator unique(
      ForwardIterator _First, 
      ForwardIterator _Last,
      Predicate _Comp
   );

매개 변수

  • _First
    중복 제거에 대 한 검색 범위에서 위치를 첫 번째 요소의 주소를 지정 하는 정방향 반복기입니다.

  • _Last
    위치 하나 과거 최종 요소 중복 제거에 대 한 검색 범위에서 주소를 지정 하는 정방향 반복기입니다.

  • _Comp
    경우 두 요소에 만족 하는 조건을 정의 하는 조건자 함수의 사용자 정의 개체는 해당 하는.두 인수를 사용 하 고 반환 하는 이진 술 부 true 만족 스 러 우면 및 거짓 만족 하지 않을 때.

반환 값

제거할 마지막 요소의 위치 하나 주소 지정는 정방향 반복기 연속 된 중복 행을 포함 하는 수정 된 시퀀스의 끝에 새입니다.

설명

두 가지 형태의 알고리즘 연속 같은 요소 쌍의 두 번째 중복을 제거합니다.

알고리즘의 작업 안정적입니다 삭제 요소의 상대적 순서는 변경 되지 않습니다.

참조 범위 유효 해야 합니다. 모든 포인터는 dereferenceable 이어야 하며 마지막 위치에서 첫 번째 접근할 시퀀스 내에서 증분 합니다.그 요소의 시퀀스에서 번호 알고리즘에 의해 변경 되지 않습니다 고유한 하 고 수정 된 시퀀스의 끝 요소 dereferenceable 하지만 지정 되지 않았습니다.

복잡성 요구 선형입니다 (_Last - _First)-1 비교 합니다.

목록 보다 효율적인 멤버 함수를 제공 합니다. 고유한를 보다 효율적으로 수행할 수 있습니다.

결합형 컨테이너에서 이러한 알고리즘을 사용할 수 없습니다.

예제

// alg_unique.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>
#include <ostream>

using namespace std;

// Return whether modulus of elem1 is equal to modulus of elem2
bool mod_equal ( int elem1, int elem2 )
{
   if ( elem1 < 0 ) 
      elem1 = - elem1;
   if ( elem2 < 0 ) 
      elem2 = - elem2;
   return elem1 == elem2;
};

int main( )
{
   vector <int> v1;
   vector <int>::iterator v1_Iter1, v1_Iter2, v1_Iter3,
         v1_NewEnd1, v1_NewEnd2, v1_NewEnd3;

   int i;
   for ( i = 0 ; i <= 3 ; i++ )
   {
      v1.push_back( 5 );
      v1.push_back( -5 );
   }

   int ii;
   for ( ii = 0 ; ii <= 3 ; ii++ )
   {
      v1.push_back( 4 );
   }
   v1.push_back( 7 );
   
   cout << "Vector v1 is ( " ;
   for ( v1_Iter1 = v1.begin( ) ; v1_Iter1 != v1.end( ) ; v1_Iter1++ )
      cout << *v1_Iter1 << " ";
   cout << ")." << endl;

   // Remove consecutive duplicates
   v1_NewEnd1 = unique ( v1.begin ( ) , v1.end ( ) );

   cout << "Removing adjacent duplicates from vector v1 gives\n ( " ;
   for ( v1_Iter1 = v1.begin( ) ; v1_Iter1 != v1_NewEnd1 ; v1_Iter1++ )
      cout << *v1_Iter1 << " ";
   cout << ")." << endl;

   // Remove consecutive duplicates under the binary prediate mod_equals
   v1_NewEnd2 = unique ( v1.begin ( ) , v1_NewEnd1 , mod_equal );

   cout << "Removing adjacent duplicates from vector v1 under the\n "
        << " binary predicate mod_equal gives\n ( " ;
   for ( v1_Iter2 = v1.begin( ) ; v1_Iter2 != v1_NewEnd2 ; v1_Iter2++ )
      cout << *v1_Iter2 << " ";
   cout << ")." << endl;

   // Remove elements if preceded by an element that was greater
   v1_NewEnd3 = unique ( v1.begin ( ) , v1_NewEnd2, greater<int>( ) );

   cout << "Removing adjacent elements satisfying the binary\n "
        << " predicate mod_equal from vector v1 gives ( " ;
   for ( v1_Iter3 = v1.begin( ) ; v1_Iter3 != v1_NewEnd3 ; v1_Iter3++ )
      cout << *v1_Iter3 << " ";
   cout << ")." << endl;
}
  
  
  
  

요구 사항

헤더: <algorithm>

네임 스페이스: std

참고 항목

참조

표준 템플릿 라이브러리