rotate
De cppreference.com
Sintaxis:
#include <algorithm> template< class ForwardIterator > void rotate( ForwardIterator inicio, ForwardIterator pivote, ForwardIterator final );
El algoritmo rotate() mueve los elementos del rango [inicio,final) hacia la "izquierda" 8es decir, hacia la dirección de inicio) de manera tal que la posición marcada por pivote se convierte en el nuevo inicio; su antecesor pivote - 1 se convierte en el nuevo final.
unique() se ejecuta en tiempo lineal en el tamaño del rango.
[editar] Modelo de Implementación
Una implementación de rotate() tendrá un comportamiento similar al código siguiente:
template<class ForwardIterator> ForwardIterator unique(ForwardIterator inicio, ForwardIterator pivote, ForwardIterator final) { ForwardIterator proximo = pivote; while (inicio != proximo) { std::swap(*inicio++, *proximo++); if (proximo == final) proximo = pivote; else if (inicio == pivote) pivote = proximo; } }
[editar] Ejemplo
#include <iostream> #include <algorithm> #include <vector> int main () { int myints[] = {7, 9, 11, 13, 15, 17}; std::vector<int> v(myints, myints + 6); std::rotate(v.begin(), v.begin() + 3, v.end()); '' ^ for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) { std::cout << *it << " "; } return 0; }
Salida:
13 15 17 7 9 11