GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::ranges::views::reverse,std::ranges::reverse_view(3) C++ Standard Libary std::ranges::views::reverse,std::ranges::reverse_view(3)

std::ranges::views::reverse,std::ranges::reverse_view - std::ranges::views::reverse,std::ranges::reverse_view


Defined in header <ranges>
template< ranges::view V >


requires ranges::bidirectional_range<V> (1) (since C++20)


class reverse_view : public
ranges::view_interface<reverse_view<V>>
namespace views {


inline constexpr /* unspecified */ reverse = /* unspecified */; (2) (since C++20)


}
Call signature
template< ranges::viewable_range R >


requires /* see below */ (since C++20)


constexpr ranges::view auto reverse( R&& r );


1) A range adaptor that represents a view of underlying view with reversed order.
2) Range adaptor object. The expression views::reverse(e) is expression-equivalent
to 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:


* ranges::subrange<I, I, K>(e.end().base(), e.begin().base(), e.size()),
if K is ranges::subrange_kind::sized;
* otherwise ranges::subrange<I, I, K>(e.end().base(), e.begin().base());


* otherwise ranges::reverse_view{e}.


In other words, 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.


Expression-equivalent


Expression e is expression-equivalent to expression f, if


* e and f have the same effects, and
* either both are constant subexpressions or else neither is a constant
subexpression, and
* either both are potentially-throwing or else neither is potentially-throwing
(i.e. noexcept(e) == noexcept(f)).


Data members


Typical implementations of reverse_view hold only one or two member objects:


* the underlying view of type V (shown here as base_, the name is exposition
only), and
* a std::optional-like cache object that holds either no value or the end
iterator/position of the underlying view, which exists only if the underlying
view type V does not model common_range.


constructor constructs a reverse_view
(C++20) (public member function)
base returns the underlying view V
(C++20) (public member function)
begin returns the beginning iterator of the reverse_view
(C++20) (public member function)
end returns the end iterator of the reverse_view
(C++20) (public member function)
size returns the size of the view if it is bounded
(C++20) (public member function)
Inherited from std::ranges::view_interface
empty Returns whether the derived view is empty. Provided if it satisfies
(C++20) sized_range or forward_range.
(public member function of std::ranges::view_interface<D>)
operator bool Returns whether the derived view is not empty. Provided if
(C++20) ranges::empty is applicable to it.
(public member function of std::ranges::view_interface<D>)
front Returns the first element in the derived view. Provided if it
(C++20) satisfies forward_range.
(public member function of std::ranges::view_interface<D>)
back Returns the last element in the derived view. Provided if it satisfies
(C++20) bidirectional_range and common_range.
(public member function of std::ranges::view_interface<D>)
operator[] Returns the nth element in the derived view. Provided if it satisfies
(C++20) random_access_range.
(public member function of std::ranges::view_interface<D>)

std::ranges::reverse_view::reverse_view


reverse_view() requires std::default_initializable<V> = default; (1) (since C++20)
constexpr reverse_view(V r); (2) (since C++20)


1) Value-initializes base_ via its default member initializer (= V()).
2) Initializes base_ with std::move(r).


r - range to reverse

std::ranges::reverse_view::base


constexpr V base() const& requires std::copy_constructible<V>; (1) (since C++20)
constexpr V base() &&; (2) (since C++20)


Returns the underlying view.


1) Copy-constructs the result from the underlying view. Equivalent to return base_;.
2) Move-constructs the result from the underlying view. Equivalent to return
std::move(base_);.

std::ranges::reverse_view::begin


constexpr std::reverse_iterator<ranges::iterator_t<V>> begin(); (1) (since C++20)
constexpr std::reverse_iterator<ranges::iterator_t<V>> begin() (2) (since C++20)
requires ranges::common_range<V>;
constexpr auto begin() const requires ranges::common_range<const (3) (since C++20)
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 cache
object for use on subsequent calls.
2-3) Equivalent to return std::make_reverse_iterator(ranges::end(base_));.

std::ranges::reverse_view::end


constexpr std::reverse_iterator<ranges::iterator_t<V>> end(); (1) (since C++20)
constexpr auto end() const requires ranges::common_range<const V>; (2) (since C++20)


Equivalent to return std::make_reverse_iterator(ranges::begin(base_));.

std::ranges::reverse_view::size


constexpr auto size() requires ranges::sized_range<V> {


return ranges::size(base_); (1) (since C++20)


}
constexpr auto size() const requires ranges::sized_range<const V>
{
(2) (since C++20)
return ranges::size(base_);


}


Returns the size of the view if the view is bounded.


Deduction guides


template<class R> (since C++20)
reverse_view(R&&) -> reverse_view<views::all_t<R>>;


Helper templates


template<class T>


inline constexpr bool (since C++20)
enable_borrowed_range<std::ranges::reverse_view<T>> =


std::ranges::enable_borrowed_range<T>;


This specialization of std::ranges::enable_borrowed_range makes reverse_view satisfy
borrowed_range when the underlying view satisfies it.

// Run this code


#include <ranges>
#include <iostream>


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 `view_interface`
for (auto i{0U}; i != rv.size(); ++i)
std::cout << rv[i] << ' ';
std::cout << '\n';
}


9 5 1 4 1 3
9 5 1 4 1 3
9 5 1 4 1 3


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 it is a borrowed_range if its
borrowed_range underlying view is


reverse_iterator iterator adaptor for reverse-order traversal
(class template)
ranges::reverse reverses the order of elements in a range
(C++20) (niebloid)
ranges::reverse_copy creates a copy of a range that is reversed
(C++20) (niebloid)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.