Para ver el artículo en inglés, active la casilla Inglés. También puede ver el texto en inglés en una ventana emergente si pasa el puntero del mouse por el texto.
Traducción
Inglés

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

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

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.

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;
}
          El vector v1 es (5 -5 5 -5 5 -5 5 -5 4 4 4 4 7).
Quitar duplicados adyacentes vectoriales v1 da
 ( 5 -5 5 -5 5 -5 5 -5 4 7 ).
Quitar duplicados adyacentes vectoriales v1 bajo
  el predicado binario mod_equal da
 ( 5 4 7 ).
Quitar los elementos adyacentes que cumplen el binario
  el predicado mod_equal vectoriales v1 da (5 7).

Requisitos

Encabezado: <algorithm>

Espacio de nombres: std

Mostrar: