Partager via


unique (<algorithm>)

Supprime les éléments en double qui sont les uns â côté des autres dans une plage spécifiée.

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

Paramètres

  • _First
    Un itérateur par progression adressage la position du premier élément dans la plage à analyser pour la suppression en double.

  • _Last
    Un itérateur par progression adressage la position une après l'élément final dans la plage à analyser pour la suppression en double.

  • _Comp
    Objet de la fonction définie par l'utilisateur de prédicat qui définit la condition à répondre si deux éléments doivent être pris comme équivalent. Un prédicat binaire a besoin de deux arguments. Il renvoie true lorsqu'il est satisfait et false dans le cas contraire.

Valeur de retour

Un itérateur jusqu'à la nouvelle fin de la séquence modifiée qui ne contient aucun doublon consécutif, adressage la position une après le dernier élément pas supprimé.

Notes

Les deux formes de l'algorithme supprimez le deuxième doublon d'une paire consécutive d'éléments égaux.

Le fonctionnement de l'algorithme est stable afin que l'ordre relatif des éléments restaurés n'est pas modifié.

La plage référencée doit être valide ; tous les pointeurs doivent être deréférençables et dans la séquence la dernière position est accessible la collection contenue par l'augmentation. il compte les éléments de la séquence n'est pas modifié par l'algorithme unique et des éléments au delà de la fin de la séquence deréférençables modifiée sont pas spécifiés.

La complexité un-à-un, ce qui_Last (–) – _Firstles comparaisons 1.

La liste fournit une fonction membre plus efficace unique, qui peut donner de meilleurs résultats.

Ces algorithmes ne peuvent être utilisés dans un conteneur associatif.

Exemple

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

Configuration requise

En-tête : <algorithme>

Espace de noms : std

Voir aussi

Référence

Bibliothèque STL (Standard Template Library)