Traducciones de esta página?:

unique

Sintaxis:

#include <algorithm>
 
template< class ForwardIterator >
ForwardIterator unique( ForwardIterator inicio, ForwardIterator final );
 
template< class ForwardIterator, class Predicate >
ForwardIterator unique( ForwardIterator inicio, ForwardIterator final, Predicate iguales );

El algoritmo unique() remueve de un rango [inicio, final) todos los elementos consecutivos duplicados. La eliminación se lleva a cabo deslizando porciones del rango cuando es necesario de modo que valores repetidos se sobreescriben. Sólo el primer elemento de un grupo de iguales consecutivos permanece en su lugar.

Los parámetros inicio y final delimitan el rango. unique() puede usar dos métodos para comparar los elementos: el operador operator== cuando se invoca unique() con dos parámetros, o un predicado iguales(a,b) que devuelve true si los valores a y b son iguales, cuando es pasado como tercer parámetro.

El algoritmo devuelve un iterador apuntando al nuevo final del rango.

unique() se ejecuta en tiempo lineal en el tamaño del rango.

Modelo de Implementación

Una implementación de unique() tendrá un comportamiento similar al código siguiente:

template<class ForwardIterator, class Predicate>
ForwardIterator unique(ForwardIterator inicio, ForwardIterator final, Predicate iguales)
{
    ForwardIterator nuevofinal = inicio;
    while (++inicio != final) {
        if (!iguales(*nuevofinal == *inicio)) {
            *(++nuevofinal) = *inicio;
        }
    }
    return ++nuevofinal;
}

Ejemplo

FIXME Traducir

#include <iostream>
#include <algorithm>
#include <vector>
 
int main () {
    int myints[] = {10,20,20,20,30,30,20,20,10};
    std::vector<int> v(myints, myints + 9);
    std::vector<int>::iterator last;
 
    last = std::unique(v.begin(), v.end()); // 10 20 30 20 10 30 20 20 10
                                            //                ^
    for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) {
        std::cout << *it << " ";
    }
 
    return 0;
}

Salida:

10 20 30 20 10

Tópicos Relacionados