Sdílet prostřednictvím


unique_copy

Zkopíruje prvky ze zdrojové oblasti do cílové oblasti, s výjimkou duplicitní prvky, které jsou vedle sebe.

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
    Přední iterátor adresování umístění prvního prvku ve zdrojové oblasti ke kopírování.

  • _Last
    Přední iterátor adresování jednu pozici za poslední prvek ve zdrojové oblasti ke kopírování.

  • _Result
    Adresování umístění první prvek v cílové oblasti, který přijímá kopii s duplicitní po sobě následující iterace výstup odebrán.

  • _Comp
    Objekt predikátu funkce definované uživatelem, který definuje podmínky splněné, jestliže jsou dva prvky mají být přijata jako rovnocenný.Binární predikát přijímá dva argumenty a vrátí hodnotu true, když vyhovují, a hodnotu false, pokud nevyhovují.

Vrácená hodnota

Adresování jednu pozici za poslední prvek v cílové oblasti, který přijímá kopii s duplicitní po sobě následující iterace výstup odebrán.

Poznámky

Obě formy algoritmus odeberte druhý duplicitní po sobě následující dvojice stejné prvky.

Operace algoritmu je stabilní tak, že se nezmění relativní pořadí prvků obnovena.

Odkazované oblasti musí být platná. všechny ukazatele musí být dereferenceable a v rámci posloupnosti je dostupná z první na poslední pozici ve incrementation.

Složitost je lineární, které vyžadují (_Last - _First) porovnání.

unique_copy má dva související formuláře:

Informace o chování těchto funkcí naleznete v tématu Checked – iterátory.

Příklad

// 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;
}

Výsledek

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 ).

Požadavky

Záhlaví: <algoritmus>

Obor názvů: std

Viz také

Referenční dokumentace

Standardní knihovna šablon