The reverse function in C++ Algorithm is employed to invert the sequence of elements in a specified range [first, last).
Syntax
template <class BidirectionalIterator>
void reverse (BidirectionalIterator first, BidirectionalIterator last);
Note: BidirectionalIterator is an iterator which is used to access any elements of a container in both forward and backward direction.
Parameter
A bidirectional iterator indicates the location of the initial element within the range where the elements are being reversed.
The last iterator points to the element immediately after the last one in the range where the reversal operation is being performed.
Return value
Complexity
The complexity increases linearly within the specified range [first, last) while swapping elements.
Data races
The elements within the range [first, last) undergo modifications.
Exceptions
This function will raise an exception if either an element is exchanged or if an operation on the iterator results in an exception.
Note: The invalid parameters cause an undefined behavior.
Example 1
Let's explore a basic example showcasing how to reverse a provided string:
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "Hello Myself Nikita";
cout << "Before Reverse : "<< str << endl;
reverse(str.begin(), str.end());
cout <<"After Reverse : " << str << endl;
return 0;
}
Output:
Before Reverse : Hello Myself Nikita
After Reverse : atikiN flesyM olleH
Example 2
Let's examine another straightforward example to invert the range of numbers:
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int main( ) {
vector <int> v1;
vector <int>::iterator Iter1;
int i;
for ( i = 0 ; i <= 9 ; i++ )
{
v1.push_back( i );
}
cout << "The original vector v1 is:\n ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
// Reverse the elements in the vector
reverse (v1.begin( ), v1.end( ) );
cout << "The modified vector v1 with values reversed is:\n ( " ;
for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
cout << *Iter1 << " ";
cout << ")." << endl;
return 0;
}
Output:
The original vector v1 is:
( 0 1 2 3 4 5 6 7 8 9 ).
The modified vector v1 with values reversed is:
( 9 8 7 6 5 4 3 2 1 0 ).
Example 3
Let's see another simple example:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
vector <int> v ;
// Inserting elements in vector
for (int i = 0; i < 8; i++)
v.push_back(i+10);
// Displaying elements of vector
vector <int> :: iterator it;
cout<<"Before: ";
for (it = v.begin(); it != v.end(); it++)
cout << (*it) << " ";
cout << "\n\nReverse only from index 5 to 7 in array:\n";
// Reversing elements from index 5 to index 7
reverse(v.begin() + 5, v.begin() + 8);
for (it = v.begin(); it != v.end(); it++)
cout << (*it) << " ";
// Reversing directly from beginning to end
cout << "\nReverse full array:\n";
int a[] = {4, 5, 6, 7};
reverse(begin(a), end(a));
// Print the array
cout << a[0] << a[1] << a[2] << a[3] << '\n';
return 0;
}
Output:
Before: 10 11 12 13 14 15 16 17
Reverse only from index 5 to 7 in array:
10 11 12 13 14 17 16 15
Reverse full array:
7654
Example 4
Let's see another simple example:
#include <iostream>
#include <algorithm>
#include <vector>
#include <iomanip>
using namespace std;
void print(string a[], int N)
{
for(int i = 0; i < N; i++)
{
cout << (i + 1) << ". " << setw(5)
<< a[i] << " ";
}
cout << endl;
}
int main()
{
string s[] = {"George", "John", "Nik", "Alice", "Bob", "Watson"};
cout << "Original order : ";
print(s, 6);
cout << "\nReversing the order ... " << endl;
reverse(s, s + 6);
cout << "Reversed order : ";
print(s, 6);
}
Output:
Original order : 1. George 2. John 3. Nik 4. Alice 5. Bob 6. Watson
Reversing the order ....
Reversed order : 1. Watson 2. Bob 3. Alice 4. Nik 5. John 6. George