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