Rotar en C++ STL – Part 1

La función se define en el encabezado <algoritmo>. Rota el orden de los elementos en el rango [primero, último], de tal manera que el elemento señalado por el medio se convierte en el nuevo primer elemento. Plantilla de función:

void rotar(ForwardIterator first, ForwardIterator middle, ForwardIterator last) first, last : Reenviar iteradores a las posiciones inicial y final de la secuencia que se rotará en medio : Reenviar iterador apuntando al elemento dentro del rango [primero, último] al que se mueve la primera posición en el rango.

Complejidad de tiempo: Hasta lineal en la distancia entre el primero y el último: Intercambia (o mueve) elementos hasta que todos los elementos hayan sido reubicados.

Tipos de rotaciones

  1. Rotación a la izquierda: para rotar a la izquierda, necesitamos agregar el índice del vector. Por ejemplo, tienes que rotar el vector a la izquierda 3 veces. El tercer índice del vector se convierte en el primer elemento. vec.begin() + 3 rotará el vector 3 veces hacia la izquierda.
  2. Rotación a la derecha: para rotar a la derecha, debemos restar el índice del vector. Por ejemplo, tienes que rotar el vector a la derecha 3 veces. El tercer último índice del vector se convierte en el primer elemento. vec.begin()+vec.size()-3 rotará el vector 3 veces a la derecha.

Ejemplos:

Entrada: 1 2 3 4 5 6 7 8 9
Salida:
Vector antiguo: 1 2 3 4 5 6 7 8 9
Vector nuevo: 4 5 6 7 8 9 1 2 3 // Girado en la 3ª posición, índice inicial como 0.

Entrada: 8 2 4 6 11 0 15 8
Salida:
Vector antiguo: 8 2 4 6 11 0 15 8
Vector nuevo: 0 15 8 8 2 4 6 11 //Rotado en la quinta posición, índice inicial como 0.

C++

// CPP program to rotate vector
// using rotate algorithm
 
#include<bits/stdc++.h>
using namespace std;
 
int main () {
    vector<int> vec1{1,2,3,4,5,6,7,8,9};
 
    // Print old vector
    cout << "Old vector :";
    for(int i=0; i < vec1.size(); i++)
        cout << " " << vec1[i];
    cout << "\n";
    // Rotate vector left 3 times.
    int rotL=3;
 
    // rotate function
    rotate(vec1.begin(), vec1.begin()+rotL, vec1.end());
 
    // Print new vector
    cout << "New vector after left rotation :";
    for (int i=0; i < vec1.size(); i++)
        cout<<" "<<vec1[i];
    cout << "\n\n";
 
    vector <int> vec2{1,2,3,4,5,6,7,8,9};
 
    // Print old vector
    cout << "Old vector :";
    for (int i=0; i < vec2.size(); i++)
        cout << " " << vec2[i];
    cout << "\n";
 
    // Rotate vector right 4 times.
    int rotR = 4;
 
    // rotate function
    rotate(vec2.begin(), vec2.begin()+vec2.size()-rotR, vec2.end());
 
    // Print new vector
    cout << "New vector after right rotation :";
    for (int i=0; i < vec2.size(); i++)
        cout << " " << vec2[i];
    cout << "\n";
 
return 0;
}
Producción

Old vector : 1 2 3 4 5 6 7 8 9
New vector after left rotation : 4 5 6 7 8 9 1 2 3

Old vector : 1 2 3 4 5 6 7 8 9
New vector after right rotation : 6 7 8 9 1 2 3 4 5

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *