Freigeben über


unique_copy

Kopiert Elemente aus einem Quellbereich in einen Zielbereich außer, die doppelte Elemente nebeneinander angeordnet sind.

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, 
   );

Parameter

  • _First
    Ein Vorwärtsiterator, der die Position des ersten Elements im Quellbereich behandelt kopiert werden.

  • _Last
    Ein Vorwärtsiterator, der die Position eine hinter dem letzten Element im Quellbereich behandelt kopiert werden.

  • _Result
    Ein Ausgabeiterator, der die Position des ersten Elements im Zielbereich anspricht, der Kopie die mit nachfolgenden entfernten Duplikaten empfängt.

  • _Comp
    Benutzerdefiniertes Prädikatfunktionsobjekt, das die erfüllt werden definiert Bedingung, wenn zwei Elemente als Entsprechung ausgeführt werden sollen. Ein binärer Prädikat akzeptiert zwei Argumente und gibt bei Erfüllung true zurück und false, wenn es nicht erfüllt wird.

Rückgabewert

Ein Ausgabeiterator, der die Position eine hinter dem letzten Element im Zielbereich anspricht, der Kopie die mit nachfolgenden entfernten Duplikaten empfängt.

Hinweise

Beide Formulare des Algorithmus entfernen das zweite Duplikat eines nachfolgenden Paares gleicher Elemente.

Der Vorgang des Algorithmus ist stabil, sodass die relative Position der wiederhergestellten Elemente nicht geändert wird.

Die Bereiche, auf die verwiesen wird, müssen gültig sein; alle Zeiger müssen dereferenzierbar befinden einer Sequenz ist die letzte Position der ersten von Zunahme erreichbar.

Die Komplexität ist linear und erfordert (_Last - _First) Vergleiche.

unique_copy verfügt über zwei verknüpfte Formulare:

Informationen über das Verhalten dieser Funktionen finden Sie unter Überprüfte Iteratoren.

Beispiel

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

Ausgabe

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

Anforderungen

Header: <algorithm>

Namespace: std

Siehe auch

Referenz

Standardvorlagenbibliothek