# std::make_reverse_iterator

From cppreference.com
< cpp‎ | iterator

Defined in header `<iterator>` |  |
template <class Iterator> std::reverse_iterator<Iterator> make_reverse_iterator( Iterator i ); |  | (since C++14) (until C++17)
template <class Iterator> constexpr std::reverse_iterator<Iterator> make_reverse_iterator( Iterator i ); |  | (since C++17)

`make_reverse_iterator` is a convenience function template that constructs a std::reverse_iterator for the given iterator `i` with the type deduced from the type of the argument.

### Parameters

i | - | input iterator to be converted to reverse iterator

### Return value

A std::reverse_iterator constructed from `i`

### Possible implementation

    template< class Iterator >
    std::reverse_iterator<Iterator> make_reverse_iterator( Iterator i )
    {
        return std::reverse_iterator<Iterator>(i);
    }

### Example

Run this code

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

    int main() {
        auto v = std::vector<int>{ 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 a container or array (function)
rend crend (C++14) | returns a reverse end iterator for a container or array (function)

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