std::make_reverse_iterator(3)

NAME
std::make_reverse_iterator - std::make_reverse_iterator

Synopsis
   Defined in header <iterator>
   template <class Iter> (since C++14)
   std::reverse_iterator<Iter> make_reverse_iterator( Iter i ); (until C++17)
   template <class Iter>
   constexpr std::reverse_iterator<Iter> make_reverse_iterator( Iter i (since C++17)
   );
   make_reverse_iterator is a convenience function template that constructs a
   std::reverse_iterator for the given iterator i (which must be a
   LegacyBidirectionalIterator) with the type deduced from the type of the argument.

Parameters
   i - iterator to be converted to reverse iterator

Return value
   A std::reverse_iterator constructed from i

Notes
   Feature-test macro: __cpp_lib_make_reverse_iterator

Possible implementation
   template< class Iter >
   constexpr std::reverse_iterator<Iter> make_reverse_iterator( Iter i )
   {
       return std::reverse_iterator<Iter>(i);
   }

Example
// Run this code
 #include <iostream>
 #include <iterator>
 #include <vector>
 #include <algorithm>
 int main() {
     std::vector<int> v{ 1, 3, 10, 8, 22 };
     std::sort(v.begin(), v.end());
     std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, ", "));
     std::cout << '\n';
     std::copy(
         std::make_reverse_iterator(v.end()),
         std::make_reverse_iterator(v.begin()),
         std::ostream_iterator<int>(std::cout, ", "));
 }

Output:
 1, 3, 8, 10, 22,
 22, 10, 8, 3, 1,

See also
   reverse_iterator iterator adaptor for reverse-order traversal
                    (class template)
   rbegin returns a reverse iterator to the beginning of a container or array
   crbegin (function template)
   (C++14)
   rend returns a reverse end iterator for a container or array
   crend (function template)
   (C++14)