Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::ranges::views::slide,std::ranges::slide_view

      From cppreference.com
      <cpp‎ |ranges
       
       
      Ranges library
      Range adaptors
       
      std::ranges::slide_view
      Member functions
      Deduction guides
      Iterator
      Member functions
      Non-member functions
      Sentinel
      Member functions
      Non-member functions
       
      Defined in header<ranges>
      template<ranges::forward_range V>

          requiresranges::view<V>
      class slide_view

         :publicranges::view_interface<slide_view<V>>
      (1)(since C++23)
      namespace views{

         inlineconstexpr/* unspecified */ slide=/* unspecified */;

      }
      (2)(since C++23)
      Call signature
      template<ranges::viewable_range R>
      constexprranges::viewauto slide( R&& r,ranges::range_difference_t<R> n);
      (since C++23)
      template<class DifferenceType>
      constexpr/* range adaptor object */ slide( DifferenceType&& n);
      (since C++23)
      Helper concepts
      template<class V>

      concept/*slide-caches-nothing*/=

         ranges::random_access_range<V>&&ranges::sized_range<V>;
      (3)(exposition only*)
      template<class V>

      concept/*slide-caches-last*/=
         !/*slide-caches-nothing*/<V>&&

         ranges::bidirectional_range<V>&&ranges::common_range<V>;
      (4)(exposition only*)
      template<class V>

      concept/*slide-caches-first*/=

         !/*slide-caches-nothing*/<V>&&!/*slide-caches-last*/<V>;
      (5)(exposition only*)
      1)slide_view is a range adaptor that takes aview and a numbern and produces a view whosemth element (a “window”) is a view over[mm + n - 1] elements of the original view.
      Lets be the size of the original view. Then the size of produced view is:
      • s- n+1, ifs>= n,
      • 0 otherwise, and the resulting view is empty.
      2) The nameviews::slide denotes aRangeAdaptorObject. Given subexpressionse andn, the expressionviews::slide(e, n) isexpression-equivalent toslide_view(e, n).

      Ifn is not greater than0, the behavior is undefined.

      slide_view always modelsforward_range, and modelsbidirectional_range,random_access_range, orsized_range if adaptedview type models the corresponding concept.

      Contents

      [edit]Data members

      Member Description
      Vbase_ the underlying view
      (exposition-only member object*)
      ranges::range_difference_t<V>n_ the “window” size
      (exposition-only member object*)
      non-propagating-cache<ranges::iterator_t<V>>cached_begin_
      (present only ifV models theslide-caches-first)
      an object that caches the result ofbegin()
      (exposition-only member object*)
      non-propagating-cache<ranges::iterator_t<V>>cached_end_
      (present only ifV models theslide-caches-last)
      an object that caches the result ofend()
      (exposition-only member object*)

      [edit]Member functions

      constructs aslide_view
      (public member function)[edit]
      returns an iterator to the beginning
      (public member function)[edit]
      returns an iterator or a sentinel to the end
      (public member function)[edit]
      returns the number of elements, provided only if the underlying (adapted) range satisfiessized_range
      (public member function)[edit]
      returns the approximate size of the resultingapproximately_sized_range
      (public member function)[edit]
      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]

      [edit]Deduction guides

      [edit]Nested classes

      (C++23)
      the iterator type
      (exposition-only member class template*)
      (C++23)
      the sentinel type used whenslide_view is not acommon_range
      (exposition-only member class template*)

      [edit]Helper templates

      template<class V>

      constexprboolranges::enable_borrowed_range<slide_view<V>>=

         ranges::enable_borrowed_range<V>;
      (since C++23)

      This specialization ofranges::enable_borrowed_range makesslide_view satisfyborrowed_range when the underlying view satisfies it.

      [edit]Notes

      There are similarities betweenranges::adjacent_view andranges::slide_view:

      • Both create “sliding window” of sizeN.
      • Both have the same sizeS - N + 1, whereS is the size of an adaptedview such thatS >= N > 0.

      The following table shows the differences between these adaptors:

      View adaptorvalue_typeThe window sizeN
      ranges::adjacent_viewstd::tupleA template parameter
      ranges::slide_viewranges::rangeA runtime argument
      Feature-test macroValueStdFeature
      __cpp_lib_ranges_slide202202L(C++23)std::ranges::slide_view

      [edit]Example

      Run this code
      #include <algorithm>#include <initializer_list>#include <iostream>#include <ranges> auto print_subrange=[](std::ranges::viewable_rangeauto&& r){std::cout<<'[';for(char space[]{0,0};auto elem: r)std::cout<< space<< elem,*space=' ';std::cout<<"] ";}; int main(){constauto v={1,2,3,4,5,6}; std::cout<<"All sliding windows of width:\n";for(constunsigned width: std::views::iota(1U, 1U+ v.size())){autoconst windows= v| std::views::slide(width);std::cout<<"W = "<< width<<": ";        std::ranges::for_each(windows, print_subrange);std::cout<<'\n';}}

      Output:

      All sliding windows of width W:W = 1: [1] [2] [3] [4] [5] [6] W = 2: [1 2] [2 3] [3 4] [4 5] [5 6] W = 3: [1 2 3] [2 3 4] [3 4 5] [4 5 6] W = 4: [1 2 3 4] [2 3 4 5] [3 4 5 6] W = 5: [1 2 3 4 5] [2 3 4 5 6] W = 6: [1 2 3 4 5 6]

      [edit]References

      • C++23 standard (ISO/IEC 14882:2024):
      • 26.7.29 Slide view [range.slide]

      [edit]See also

      aview consisting of tuples of references to adjacent elements of the adapted view
      (class template)(range adaptor object)[edit]
      a range ofviews that areN-sized non-overlapping successive chunks of the elements of anotherview
      (class template)(range adaptor object)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/ranges/slide_view&oldid=182455"

      [8]ページ先頭

      ©2009-2025 Movatter.jp