std::ranges::view::reverse,std::ranges::reverse_view (3) - Linux Manuals
std::ranges::view::reverse,std::ranges::reverse_view: std::ranges::view::reverse,std::ranges::reverse_view
NAME
std::ranges::view::reverse,std::ranges::reverse_view - std::ranges::view::reverse,std::ranges::reverse_view
Synopsis
template< View V >
requires BidirectionalRange<V> (1) (since C++20)
class reverse_view : public ranges::view_interface<reverse_view<V>>
namespace view {
inline constexpr /*unspecified*/ reverse = /*unspecified*/; (2) (since C++20)
}
1) A range adaptor that represents a view of underlying View with reversed order.
2) The expression view::reverse(E) is expression-equivalent to (has the same effect as) one of the following expressions, except that E is evaluated only once:
* E.base(), if the type of E is a (possibly cv-qualified) specialization of reverse_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 value K of type ranges::subrange_kind:
* otherwise ranges::reverse_view{E}.
In other words, view::reverse unwraps reversed views if possible.
Data members
std::ranges::reverse_view::base_
V base_ = V(); /* exposition-only */
the underlying view
Member functions
std::ranges::reverse_view::reverse_view
reverse_view() = default; (1)
constexpr reverse_view(V base); (2)
template<ViewableRange R>
requires BidirectionalRange<R> && Constructible<V, all_view<R>> (3)
constexpr reverse_view(R&& r);
1) Value-initializes base_
2) Initializes base_ with std::move(base).
3) Initializes base_ with view::all(std::forward<R>(r)).
Parameters
r - range to reverse
std::ranges::reverse_view::base
constexpr V base() const;
Equivalent to return base_;
std::ranges::reverse_view::begin
constexpr std::reverse_iterator<ranges::iterator_t<V>> begin(); (1)
constexpr std::reverse_iterator<ranges::iterator_t<V>> begin() (2)
requires CommonRange<V>;
constexpr std::reverse_iterator<ranges::iterator_t<const V>> begin() const (2)
requires CommonRange<const V>;
1) Returns std::make_reverse_iterator(ranges::next(ranges::begin(base_), ranges::end(base_))). In order to provide the amortized constant time complexity required by the Range concept, this function caches the result within the reverse_view object for use on subsequent calls.
2) Equivalent to return std::make_reverse_iterator(ranges::end(base_));.
std::ranges::reverse_view::end
constexpr std::reverse_iterator<ranges::iterator_t<V>> end()
requires CommonRange<V>;
constexpr std::reverse_iterator<ranges::iterator_t<const V>> end() const
requires CommonRange<const V>;
Equivalent to return std::make_reverse_iterator(ranges::begin(base_));.
std::ranges::reverse_view::size
constexpr auto size() requires SizedRange<V> {
return ranges::size(base_);
}
constexpr auto size() const requires SizedRange<const V> {
return ranges::size(base_);
}
Returns the size of the view if the view is bounded.
Deduction guides
template<class R>
reverse_view(R&&) -> reverse_view<all_view<R>>;
Example
// Run this code
Output:
See also
reverse_iterator (class template)