Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

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

      From cppreference.com
      <cpp‎ |ranges
       
       
      Ranges library
      Range adaptors
       
      Defined in header<ranges>
      template<ranges::view V>

          requiresranges::bidirectional_range<V>
      class reverse_view

         :publicranges::view_interface<reverse_view<V>>
      (1)(since C++20)
      namespace views{

         inlineconstexpr/* unspecified */ reverse=/* unspecified */;

      }
      (2)(since C++20)
      Call signature
      template<ranges::viewable_range R>

          requires/* see below */

      constexprranges::viewauto reverse( R&& r);
      (since C++20)
      1) A range adaptor that represents a view of underlyingview with reversed order.
      2)RangeAdaptorObject. The expressionviews::reverse(e) isexpression-equivalent to one of the following expressions, except thate is evaluated only once:
      • ranges::subrange<I, I, K>(e.end().base(), e.begin().base(), e.size()), ifK isranges::subrange_kind::sized;
      • otherwiseranges::subrange<I, I, K>(e.end().base(), e.begin().base());
      • otherwiseranges::reverse_view{e}.
      In other words,views::reverse unwraps reversed views if possible.

      Areverse_view always modelsbidirectional_range andcommon_range, and it modelsborrowed_range,sized_range, orrandom_access_range if the underlying view typeV models the corresponding concept.

      Contents

      [edit]Data members

      Member Description
      Vbase_(private) the underlying view
      (exposition-only member object*)
      non-propagating-cache<ranges::iterator_t<V>>cached_end_(private)
      (present only ifV does not satisfycommon_range)
      an object that caches the result of calls tobegin()
      (exposition-only member object*)

      [edit]Member functions

      constructs areverse_view
      (public member function)
      returns the underlying viewV
      (public member function)
      returns the beginning iterator of thereverse_view
      (public member function)
      returns the end iterator of thereverse_view
      (public member function)
      returns the size of the view if it is bounded
      (public member function)
      returns the approximate size of the underlyingapproximately_sized_range
      (public member function)
      Inherited fromstd::ranges::view_interface
      returns whether the derived view is empty, provided only if it satisfiessized_range orforward_range
      (public member function ofstd::ranges::view_interface<D>)[edit]
      (C++23)
      returns a constant iterator to the beginning of the range
      (public member function ofstd::ranges::view_interface<D>)[edit]
      (C++23)
      returns a sentinel for the constant iterator of the range
      (public member function ofstd::ranges::view_interface<D>)[edit]
      returns whether the derived view is not empty, provided only ifranges::empty is applicable to it
      (public member function ofstd::ranges::view_interface<D>)[edit]
      returns the first element in the derived view, provided if it satisfiesforward_range
      (public member function ofstd::ranges::view_interface<D>)[edit]
      returns the last element in the derived view, provided only if it satisfiesbidirectional_range andcommon_range
      (public member function ofstd::ranges::view_interface<D>)[edit]
      returns thenth element in the derived view, provided only if it satisfiesrandom_access_range
      (public member function ofstd::ranges::view_interface<D>)[edit]

      std::ranges::reverse_view::reverse_view

      reverse_view() requiresstd::default_initializable<V>=default;
      (1)(since C++20)
      constexpr reverse_view( V r);
      (2)(since C++20)
      1) Value-initializesbase_  via its default member initializer (= V()).
      2) Initializesbase_  withstd::move(r).

      Parameters

      r - range to reverse

      std::ranges::reverse_view::base

      constexpr V base()const& requiresstd::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 toreturn base_ ;.
      2) Move-constructs the result from the underlying view. Equivalent toreturn std::move(base_ );.

      std::ranges::reverse_view::begin

      (1)(since C++20)
      constexprstd::reverse_iterator<ranges::iterator_t<V>> begin()
          requiresranges::common_range<V>;
      (2)(since C++20)
      constexprauto begin()const requiresranges::common_range<const V>;
      (3)(since C++20)
      1) Returnsstd::make_reverse_iterator(ranges::next(ranges::begin(base_ ),
                                 ranges::end(base_ )))
      .
      In order to provide the amortized constant time complexity required by therange concept, this function caches the result within the cache object for use on subsequent calls.
      2,3) Equivalent toreturnstd::make_reverse_iterator(ranges::end(base_ ));.

      std::ranges::reverse_view::end

      (1)(since C++20)
      constexprauto end()const requiresranges::common_range<const V>;
      (2)(since C++20)

      Equivalent toreturnstd::make_reverse_iterator(ranges::begin(base_ ));.

      std::ranges::reverse_view::size

      constexprauto size() requiresranges::sized_range<V>;
      (1)(since C++20)
      constexprauto size()const requiresranges::sized_range<const V>;
      (2)(since C++20)

      Returns the size of the view if the view is bounded. Equivalent toreturnranges::size(base_ );.

      std::ranges::as_rvalue_view::reserve_hint

      constexprauto reserve_hint()
          requires ranges::approximately_sized_range<V>;
      (1)(since C++26)
      constexprauto reserve_hint()const
          requires ranges::approximately_sized_range<const V>;
      (2)(since C++26)

      Returnsranges::reserve_hint(base_ ).

      [edit]Deduction guides

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

      [edit]Helper templates

      template<class T>

      constexprbool enable_borrowed_range<std::ranges::reverse_view<T>>=

         ranges::enable_borrowed_range<T>;
      (since C++20)

      This specialization ofstd::ranges::enable_borrowed_range makesreverse_view satisfyborrowed_range when the underlying view satisfies it.

      [edit]Notes

      Feature-test macroValueStdFeature
      __cpp_lib_ranges_reserve_hint202502L(C++26)ranges::approximately_sized_range andreserve_hint

      [edit]Example

      Run this code
      #include <iostream>#include <ranges> int main(){staticconstexprauto 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_interfacefor(auto i{0U}; i!= rv.size();++i)std::cout<< rv[i]<<' ';std::cout<<'\n';}

      Output:

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

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 3494C++20reverse_view was never aborrowed_rangeit is aborrowed_range if its underlying view is

      [edit]See also

      iterator adaptor for reverse-order traversal
      (class template)[edit]
      reverses the order of elements in a range
      (algorithm function object)[edit]
      creates a copy of a range that is reversed
      (algorithm function object)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/ranges/reverse_view&oldid=182381"

      [8]ページ先頭

      ©2009-2025 Movatter.jp