# std::make_reverse_iterator

From cppreference.com
< cpp‎ | iterator

Defined in header `<iterator>` |  |
template <class Iter> std::reverse_iterator<Iter> make_reverse_iterator( Iter i ); |  | (since C++14) (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 crbegin (C++14) | returns a reverse iterator to the beginning of a container or array (function template)
rend crend (C++14) | returns a reverse end iterator for a container or array (function template)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/iterator/make_reverse_iterator&oldid=137771"