TheDeveloperBlog.com

Home | Contact Us

C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML

C++ algorithm rotate() function

C++ algorithm rotate() function with c++ tutorial for beginners and professionals with examples on adjacent_find(),any_of(), copy(), copy_if(), count(), count_if(), equal(), find(), find_end(), find_first_of(), find_if(), find_if_not(), for_each() etc.

<< Back to CPP

C++ Algorithm rotate()

C++ Algorithm rotate() function is used to rotate the order of the elements within a range [first, last).

  • The sequence will start at the element in the middle of the source sequence and the last element will be followed by first.
  • middle to the elements between the middle and the last element.

Syntax

template <class ForwardIterator>
void rotate (ForwardIterator first, ForwardIterator middle,
ForwardIterator last);					 // until C++ 11

template <class ForwardIterator>
ForwardIterator rotate (ForwardIterator first, ForwardIterator middle,
ForwardIterator last); 				    //since C++ 11

Parameter

first: A forward iterator pointing the position of the first element in the range to be rotated.

middle: A forward iterator addressing to the element within the range [first, last) that is moved to the first position in the range.

last: A forward iterator pointing the position one past the final element in the range in which the elements are being reversed.

Return value

None

Complexity

Complexity is linear in the range [first, last): swaps or moves elements until all elements have been relocated.

Data races

The object in the range [first, last) are modified.

Exceptions

This function throws an exception if either an element swap or move or an operation on iterator throws an exception.

Please note that invalid parameters cause an undefined behavior.

Example 1

Let's see the simple example to rotate the given string:

#include <algorithm>
#include <iostream>
#include <string>

using namespace std;

int main() {
  string str = "Hello";
  cout << "Before Rotate : "<< str << endl;
  
  rotate(str.begin(), str.begin() + 2, str.end());
  cout <<"After Rotate  : " << str << endl;
  
  return 0;
}

Output:

Before Rotate : Hello
After Rotate  : lloHe

Example 2

Let's see another simple example:

#include <iostream>
#include <algorithm>
#include <vector>
#include <iomanip>
using namespace std;
 
void print(char a[], int N)
{   
    for(int i = 0; i < N; i++)
    {
        cout << (i + 1) << ". " << setw(2)
             << left << a[i] << "  ";
    }
    cout << endl;
}
 
int main()
{
    char s[] = {'A', 'B', 'C', 'D', 'E', 'G', 'H'};
    int slen = sizeof(s) / sizeof(char);
 
    cout << "Original order : ";
    print(s, slen);
    cout << "Rotate with \'C\' as middle element" << endl;
    rotate(s, s + 2, s + slen);
    cout << "Rotated order  : ";
    print(s, slen);
    cout << "Rotate with \'G\' as middle element" << endl;
    rotate(s, s + 3, s + slen);
    cout << "Rotated order  : ";
    print(s, slen);
    cout << "Rotate with \'A\' as middle element" << endl;
    rotate(s, s + 3, s + slen);
    cout << "Original order : ";
    print(s, slen);
    
    return 0;
}

Output:

Original order : 1. A   2. B   3. C   4. D   5. E   6. G   7. H   
Rotate with 'C' as middle element
Rotated order  : 1. C   2. D   3. E   4. G   5. H   6. A   7. B   
Rotate with 'G' as middle element
Rotated order  : 1. G   2. H   3. A   4. B   5. C   6. D   7. E   
Rotate with 'A' as middle element
Original order : 1. B   2. C   3. D   4. E   5. G   6. H   7. A   

Example 3

Let's see another simple example:

#include<iostream> 
#include<algorithm> 
#include<vector> 
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; 
  
    // std::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; 
} 

Output:

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

Example 4

Let's see another simple example:

#include <vector>  
#include <deque>  
#include <algorithm>  
#include <iostream>  
  
int main( ) {  
   using namespace std;  
   vector <int> v1;  
   deque <int> d1;  
   vector <int>::iterator v1Iter1;  
   deque<int>::iterator d1Iter1;  
  
   int i;  
   for ( i = -3 ; i <= 5 ; i++ )  
   {  
      v1.push_back( i );  
   }  
  
   int ii;  
   for ( ii =0 ; ii <= 5 ; ii++ )  
   {  
      d1.push_back( ii );  
   }  
  
   cout << "Vector v1 is ( " ;  
   for ( v1Iter1 = v1.begin( ) ; v1Iter1 != v1.end( ) ;v1Iter1 ++ )  
      cout << *v1Iter1  << " ";  
   cout << ")." << endl;  
  
   rotate ( v1.begin ( ) , v1.begin ( ) + 3 , v1.end ( ) );  
   cout << "After rotating, vector v1 is ( " ;  
   for ( v1Iter1 = v1.begin( ) ; v1Iter1 != v1.end( ) ;v1Iter1 ++ )  
      cout << *v1Iter1  << " ";  
   cout << ")." << endl;  
  
   cout << "The original deque d1 is ( " ;  
   for ( d1Iter1 = d1.begin( ) ; d1Iter1 != d1.end( ) ;d1Iter1 ++ )  
      cout << *d1Iter1  << " ";  
   cout << ")." << endl;  
  
   int iii = 1;  
   while ( iii <= d1.end ( ) - d1.begin ( ) ) {  
      rotate ( d1.begin ( ) , d1.begin ( ) + 1 , d1.end ( ) );  
      cout << "After the rotation of a single deque element to the back,\n d1 is   ( " ;  
      for ( d1Iter1 = d1.begin( ) ; d1Iter1 != d1.end( ) ;d1Iter1 ++ )  
         cout << *d1Iter1  << " ";  
      cout << ")." << endl;  
      iii++;  
   }  
}

Output:

Vector v1 is ( -3 -2 -1 0 1 2 3 4 5 ).
After rotating, vector v1 is ( 0 1 2 3 4 5 -3 -2 -1 ).
The original deque d1 is ( 0 1 2 3 4 5 ).
After the rotation of a single deque element to the back,
 d1 is   ( 1 2 3 4 5 0 ).
After the rotation of a single deque element to the back,
 d1 is   ( 2 3 4 5 0 1 ).
After the rotation of a single deque element to the back,
 d1 is   ( 3 4 5 0 1 2 ).
After the rotation of a single deque element to the back,
 d1 is   ( 4 5 0 1 2 3 ).
After the rotation of a single deque element to the back,
 d1 is   ( 5 0 1 2 3 4 ).
After the rotation of a single deque element to the back,
 d1 is   ( 0 1 2 3 4 5 ).

Next TopicC++ Algorithm




Related Links:


Related Links

Adjectives Ado Ai Android Angular Antonyms Apache Articles Asp Autocad Automata Aws Azure Basic Binary Bitcoin Blockchain C Cassandra Change Coa Computer Control Cpp Create Creating C-Sharp Cyber Daa Data Dbms Deletion Devops Difference Discrete Es6 Ethical Examples Features Firebase Flutter Fs Git Go Hbase History Hive Hiveql How Html Idioms Insertion Installing Ios Java Joomla Js Kafka Kali Laravel Logical Machine Matlab Matrix Mongodb Mysql One Opencv Oracle Ordering Os Pandas Php Pig Pl Postgresql Powershell Prepositions Program Python React Ruby Scala Selecting Selenium Sentence Seo Sharepoint Software Spellings Spotting Spring Sql Sqlite Sqoop Svn Swift Synonyms Talend Testng Types Uml Unity Vbnet Verbal Webdriver What Wpf