unique (<algorithm>)

Quita los elementos duplicados que se adyacente a uno para en un intervalo especificado.

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

Parámetros

  • _First
    Un iterador hacia delante que dirige la posición del primer elemento del intervalo que se digitalizará para la eliminación duplicado.

  • _Last
    Un iterador hacia delante que dirige la posición una más allá del último elemento en el intervalo que se digitalizará para la eliminación duplicado.

  • _Comp
    Objeto definido por el usuario de la función de predicado que define la condición que se completará si fuese dos elementos a ser tomados como equivalentes. Un predicado binario acepta dos argumentos y devuelve true cuando se cumple y false cuando no se cumple.

Valor devuelto

Un iterador en el nuevo final de la secuencia modificada que no contenga duplicados consecutivo, resuelve la posición una más allá del último elemento no quitado.

Comentarios

Los formularios de algoritmo quitará el segundo duplicado de un par consecutivo de los elementos iguales.

La operación de algoritmo es estable para no cambiar el orden relativo de los elementos no borrados.

El intervalo hace referencia debe ser válido; todos los punteros deben ser dereferenceable y dentro de la secuencia la posición última es accesible de primera por el aumento. el algoritmo unique el número de elementos de la secuencia no cambia y los elementos más allá del final de la secuencia modificada son dereferenceable pero no especificados.

La complejidad es lineal, requiriendo (_Last – _First) las comparaciones 1.

La lista proporciona una función más eficaz únicode miembro, que puede ser mejor.

Estos algoritmos no se pueden utilizar en un contenedor asociativa.

Ejemplo

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

Requisitos

Encabezado: <algorithm>

Espacio de nombres: std

Vea también

Referencia

Biblioteca de plantillas estándar