std::ranges::views::reverse, std::ranges::reverse_view
<ranges>
requires ranges::bidirectional_range <V>
class reverse_view
inline constexpr /* unspecified */ reverse = /* unspecified */;
requires /* see below */
view with reversed order.- e.base(), if the type of
eis a (possibly cv-qualified) specialization ofreverse_view; - otherwise, if the type of e is (possibly cv-qualified) ranges::subrange <std::reverse_iterator <I>, std::reverse_iterator <I>, K> for some iterator type
Iand valueKof typeranges::subrange_kind:
- ranges::subrange <I, I, K>(e.end().base(), e.begin().base(), e.size()), if
Kisranges::subrange_kind::sized; - otherwise ranges::subrange <I, I, K>(e.end().base(), e.begin().base());
- ranges::subrange <I, I, K>(e.end().base(), e.begin().base(), e.size()), if
- otherwise ranges::reverse_view{e}.
views::reverse unwraps reversed views if possible.A reverse_view always models bidirectional_range and common_range, and it models borrowed_range, sized_range, or random_access_range if the underlying view type V models the corresponding concept.
Contents
[edit] Data members
V base_ (private)
the underlying view(exposition-only member object*)
cached_end_ (private) (present only if
V does not satisfy common_range)
an object that caches the result of calls to begin() (exposition-only member object*)
[edit] Member functions
approximately_sized_range (public member function)
Inherited from std::ranges::view_interface
sized_range or forward_range (public member function of
std::ranges::view_interface<D>) [edit]
(public member function of
std::ranges::view_interface<D>) [edit]
(public member function of
std::ranges::view_interface<D>) [edit]
(public member function of
std::ranges::view_interface<D>) [edit]
forward_range (public member function of
std::ranges::view_interface<D>) [edit]
bidirectional_range and common_range (public member function of
std::ranges::view_interface<D>) [edit]
nth element in the derived view, provided only if it satisfies random_access_range (public member function of
std::ranges::view_interface<D>) [edit]
std::ranges::reverse_view::reverse_view
Parameters
std::ranges::reverse_view::base
Returns the underlying view.
base_ ;.base_ );.
std::ranges::reverse_view::begin
requires ranges::common_range <V>;
base_ ), ranges::end (base_ ))).range concept, this function caches the result within the cache object for use on subsequent calls.base_ ));.
std::ranges::reverse_view::end
Equivalent to return std::make_reverse_iterator (ranges::begin (base_ ));.
std::ranges::reverse_view::size
Returns the size of the view if the view is bounded. Equivalent to return ranges::size (base_ );.
std::ranges::as_rvalue_view::reserve_hint
requires ranges::approximately_sized_range<V>;
requires ranges::approximately_sized_range<const V>;
Returns ranges::reserve_hint(base_ ).
[edit] Deduction guides
reverse_view( R&& ) -> reverse_view<views::all_t <R>>;
[edit] Helper templates
constexpr bool enable_borrowed_range<std::ranges::reverse_view<T>> =
This specialization of std::ranges::enable_borrowed_range makes reverse_view satisfy borrowed_range when the underlying view satisfies it.
[edit] Notes
| Feature-test macro | Value | Std | Feature |
|---|---|---|---|
__cpp_lib_ranges_reserve_hint |
202502L |
(C++26) | ranges::approximately_sized_range and reserve_hint
|
[edit] Example
#include <iostream> #include <ranges> int main() { static constexpr auto il = {3, 1, 4, 1, 5, 9}; std::ranges::reverse_view rv{il}; for (int i : rv) std::cout << i << ' '; std::cout << '\n'; for (int i : il | std::views::reverse) std::cout << i << ' '; std::cout << '\n'; // operator[] is inherited from std::view_interface for (auto i{0U}; i != rv.size(); ++i) std::cout << rv[i] << ' '; std::cout << '\n'; }
Output:
9 5 1 4 1 3 9 5 1 4 1 3 9 5 1 4 1 3
[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3494 | C++20 | reverse_view was never a borrowed_range
|
it is a borrowed_range if its underlying view is
|