Udostępnij za pośrednictwem


unique_copy

Kopie elementów z zakresu źródłowego do docelowego zakresu poza zduplikowane elementy, które przylegają do siebie.

template<class InputIterator, class OutputIterator>
   OutputIterator unique_copy(
      InputIterator _First, 
      InputIterator _Last, 
      OutputIterator _Result
   );
template<class InputIterator, class OutputIterator, class BinaryPredicate>
   OutputIterator unique_copy(
      InputIterator _First, 
      InputIterator _Last, 
      OutputIterator _Result,
      BinaryPredicate _Comp,
   );

Parametry

  • _First
    Iteratora przodu adresowania położenie pierwszego elementu w zakres źródłowy do skopiowania.

  • _Last
    Iteratora przodu adresowania jedną pozycję w przeszłości końcowy element zakresu źródłowego do skopiowania.

  • _Result
    Iterację wyjścia adresowania położenie pierwszego elementu w zakresie przeznaczenia, który otrzymuje kopię z kolejnych duplikaty są usuwane.

  • _Comp
    Obiektu predykatu funkcję zdefiniowaną przez użytkownika, który definiuje warunek spełniony, jeśli dwa elementy są pobierane za równoważne.Predykatu dwuelementowego ma dwa argumenty i zwraca true po stwierdzeniu i false , gdy nie są spełnione.

Wartość zwracana

Iterację wyjścia adresowania jedną pozycję w przeszłości końcowy element w zakresie przeznaczenia, który otrzymuje kopię z kolejnych duplikaty są usuwane.

Uwagi

Obie formy algorytm Usuń duplikat drugiej pary kolejnych elementów równe.

Operacja algorytm jest stabilny, tak, że względna kolejność elementów nieusuniętym nie zostanie zmieniona.

Zakresy, do których odwołuje się musi być ważny; wszystkie wskaźniki muszą być dereferenceable i w sekwencji ostatniej pozycji jest dostępny z pierwszym przez incrementation.

Złożoność jest liniowy, wymagające (_Last — _First) porównań.

unique_copyma dwa powiązane formularze:

Informacji na temat zachowania tych funkcji, zobacz Iteratory zaznaczone.

Przykład

// alg_unique_copy.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_NewEnd1, v1_NewEnd2;

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

   int ii;
   for ( ii = 0 ; ii <= 2 ; ii++ )
      v1.push_back( 4 );
   v1.push_back( 7 );

   int iii;
   for ( iii = 0 ; iii <= 5 ; iii++ )
      v1.push_back( 10 );
   
   cout << "Vector v1 is\n ( " ;
   for ( v1_Iter1 = v1.begin( ) ; v1_Iter1 != v1.end( ) ; v1_Iter1++ )
      cout << *v1_Iter1 << " ";
   cout << ")." << endl;

   // Copy first half to second, removing consecutive duplicates
   v1_NewEnd1 = unique_copy ( v1.begin ( ) , v1.begin ( ) + 8, v1.begin ( ) + 8 );

   cout << "Copying the first half of the vector to the second half\n "
        << "while removing adjacent duplicates gives\n ( " ;
   for ( v1_Iter1 = v1.begin( ) ; v1_Iter1 != v1_NewEnd1 ; v1_Iter1++ )
      cout << *v1_Iter1 << " ";
   cout << ")." << endl;

   int iv;
   for ( iv = 0 ; iv <= 7 ; iv++ )
      v1.push_back( 10 );

   // Remove consecutive duplicates under the binary prediate mod_equals
   v1_NewEnd2 = unique_copy ( v1.begin ( ) , v1.begin ( ) + 14, 
      v1.begin ( ) + 14 , mod_equal );

   cout << "Copying the first half of the vector to the second half\n "
        << " removing adjacent duplicates under mod_equals gives\n ( " ;
   for ( v1_Iter2 = v1.begin( ) ; v1_Iter2 != v1_NewEnd2 ; v1_Iter2++ )
      cout << *v1_Iter2 << " ";
   cout << ")." << endl;
}

Dane wyjściowe

Vector v1 is
 ( 5 -5 5 -5 4 4 4 7 10 10 10 10 10 10 ).
Copying the first half of the vector to the second half
 while removing adjacent duplicates gives
 ( 5 -5 5 -5 4 4 4 7 5 -5 5 -5 4 7 ).
Copying the first half of the vector to the second half
  removing adjacent duplicates under mod_equals gives
 ( 5 -5 5 -5 4 4 4 7 5 -5 5 -5 4 7 5 4 7 5 4 7 ).

Wymagania

Nagłówek: <algorithm>

Obszar nazw: std

Zobacz też

Informacje

Standardowa biblioteka szablonu