C++: Iterate over a Vector in Reverse Order – (backward direction)

In this article, we will discuss three different ways to iterate or loop over a C++ Vector in reverse direction.

C++ / C++11 : Iterate over a vector in Reverse order (Backward Direction)
Subscribe to our Youtube channel for more videos on C++ / C++ / STL

C++: Iterate over a vector in reverse order using Indexing

Suppose we have a vector of size N, then we can iterate over the vector in reverse order by traversing from index position N-1 to 0. For example,

#include<iostream>
#include<vector>
using namespace std;

int main()
{
    // Create a vector of integers
    vector<int> vec_of_num{1, 3, 4, 7, 8, 9};

    // Iterate over a vector in backward direction using
    // indexing
    for(int i = vec_of_num.size() - 1; i >= 0; i--)
    {
        std::cout<<vec_of_num[i]<<", ";
    }

    return 0;
}

Output:

9, 8, 7, 4, 3, 1,

The benefit of this approach is that you will also be aware of indexes of elements while iteration.

C++: Iterate over a vector in reverse order using Reverse Iterator

A reverse iterator is a kind of iterator, that travels in backwards direction.
It means when we increment a reverse_iterator, it goes to the previous element in container. So, to iterate over a vector in reverse direction, we can use the reverse_iterator to iterate from end to start.

Advertisements

vector provides two functions which returns a reverse_iterator i.e.

  • vector::rbegin() –> Returns a reverse iterator that points to the last element of vector
  • vector::rend() –> Returns a reverse iterator that points to the virtual element before the start of vector.

Now we can use a while loop to traverse from end to start in a vector using reverse_iterator returned by the functions rbegin() and rend(). For example,

#include<iostream>
#include<vector>
using namespace std;

int main()
{
    // Create a vector of integers
    vector<int> vec_of_num{1, 3, 4, 7, 8, 9};

    // Iterate over a vector in backward direction using
    // reverse iterators
    std::vector<int>::reverse_iterator it = vec_of_num.rbegin();
    while (it != vec_of_num.rend())
    {
        std::cout<<*it<<", ";
        it++;
    }

    return 0;
}

Output:

9, 8, 7, 4, 3, 1,

Read More

C++: Iterate over a vector in reverse order in single line

In the previous example, we used a while loop to iterate over a vector using reverse_iterator. But we can do same in a single line using STL Algorithm for_each().

Using STL Algorithm for_each(start, end, callback), we can iterate over all elements of a vector in a single line. It accepts three arguments i.e.

  • Start Iterator -> Iterator pointing to the start of a range
  • End Iterator -> Iterator pointing to the End of a range
  • Callback Function -> A function that needs to be applied to all elements in the range from start to end.

for_each() iterates over all the elements between start & end iterator and apply the given callback on each element.

If we pass the reverse iterators returned by rbegin() and rend() to for_each(), then it will iterate over the elements of vector in reverse direction and apply a lambda function on each item of the vector. Inside the lambda function we can perform any operation like printing the elements or any other operation. For example,

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int main()
{
    // Create a vector of integers
    vector<int> vec_of_num{1, 3, 4, 7, 8, 9};

    // Iterate over a vector in backward direction using
    // reverse iterators, for_each() and Lambda function
    std::for_each(  vec_of_num.rbegin(), 
                    vec_of_num.rend(),
                    [](const auto & elem){
                        std::cout<<elem<<", "; 
                    });

    return 0;
}

Output:

9, 8, 7, 4, 3, 1,

We iterated over all elements of a vector in reverse direction.

Summary

We learned about three different ways to iterate or loop over a vector in reverse direction.

Do you want to Learn Modern C++ from best?

We have curated a list of Best C++ Courses, that will teach you the cutting edge Modern C++ from the absolute beginning to advanced level. It will also introduce to you the word of Smart Pointers, Move semantics, Rvalue, Lambda function, auto, Variadic template, range based for loops, Multi-threading and many other latest features of C++ i.e. from C++11 to C++20.

Check Detailed Reviews of Best Modern C++ Courses

Remember, C++ requires a lot of patience, persistence, and practice. So, start learning today.

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to Top