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
e
is 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
I
and valueK
of typeranges::subrange_kind
:
- ranges::subrange <I, I, K>(e.end().base(), e.begin().base(), e.size()), if
K
isranges::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]
n
th 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
|