Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::ranges::views::elements,std::ranges::elements_view

      From cppreference.com
      <cpp‎ |ranges
       
       
      Ranges library
      Range adaptors
       
      std::ranges::elements_view
      Member functions
      Nested classes
      Iterator
      Sentinel
       
      Defined in header<ranges>
      template<ranges::input_range V,std::size_t N>

          requiresranges::view<V>&&
                   /*has-tuple-element*/<ranges::range_value_t<V>, N>&&
                   /*has-tuple-element*/<std::remove_reference_t<
                                             ranges::range_reference_t<V>>, N>&&
                   /*returnable-element*/<ranges::range_reference_t<V>, N>
      class elements_view

         :publicranges::view_interface<elements_view<V, N>>;
      (1)(since C++20)
      namespace views{

         template<std::size_t N>
         constexpr/* unspecified */ elements=/* unspecified */;

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

          requires/* see below */

      constexprranges::viewauto elements<N>( R&& r);
      (since C++20)
      Helper concepts
      (3)
      template<class T,std::size_t N>

      concept/*has-tuple-element*/=
          requires(T t){
             typenamestd::tuple_size<T>::type;
              requires N<std::tuple_size_v<T>;
             typenamestd::tuple_element_t<N, T>;
             { std::get<N>(t)}->std::convertible_to<
                                       conststd::tuple_element_t<N, T>&>;

         };
      (until C++23)
      (exposition only*)
      template<class T,std::size_t N>

      concept/*has-tuple-element*/=

         /*tuple-like*/<T>&& N<std::tuple_size_v<T>
      (since C++23)
      (exposition only*)
      template<class T,std::size_t N>

      concept returnable-element=
           std::is_reference_v<T>||std::move_constructible<

                                             std::tuple_element_t<N, T>>;
      (4)(exposition only*)
      1) Accepts aview of tuple-like values, and issues a view with a value type of theNth element of the adapted view's value-type.
      2) Every specialization ofviews::elements is aRangeAdaptorObject. The expressionviews::elements<M>(e) isexpression-equivalent toelements_view<views::all_t<decltype((e))>, M>{e} for any suitable subexpressione and constant expressionM.
      3) Ensures that the elements of the underlying view are tuple-like values, seetuple-like(since C++23).
      4) Ensures that dangling references cannot be returned.

      elements_view models the conceptsrandom_access_range,bidirectional_range,forward_range,input_range,common_range, andsized_range when the underlying viewV models respective concepts.

      Contents

      [edit]Data members

      Member Description
      Vbase_ the underlying view
      (exposition-only member object*)

      [edit]Member functions

      constructs aelements_view
      (public member function)[edit]
      returns a copy of the underlying (adapted) 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]Nested classes

      the iterator type
      (exposition-only member class template*)
      the sentinel type
      (exposition-only member class template*)

      [edit]Helper templates

      template<class T,std::size_t N>

      constexprbool enable_borrowed_range<std::ranges::elements_view<T, N>>=

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

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

      [edit]Example

      Run this code
      #include <iostream>#include <ranges>#include <string>#include <tuple>#include <vector> int main(){conststd::vector<std::tuple<int,char,std::string>> vt{{1,'A',"α"},{2,'B',"β"},{3,'C',"γ"},{4,'D',"δ"},{5,'E',"ε"},}; for(intconst e: std::views::elements<0>(vt))std::cout<< e<<' ';std::cout<<'\n'; for(charconst e: vt| std::views::elements<1>)std::cout<< e<<' ';std::cout<<'\n'; for(std::stringconst& e: std::views::elements<2>(vt))std::cout<< e<<' ';std::cout<<'\n';}

      Output:

      1 2 3 4 5A B C D Eα β γ δ ε

      [edit]Defect reports

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

      DRApplied toBehavior as publishedCorrect behavior
      LWG 3494C++20elements_view was never aborrowed_rangeit is aborrowed_range
      if its underlying view is
      LWG 3502C++20dangling reference could be obtained fromelements_viewsuch usage is forbidden

      [edit]See also

      takes aview consisting of pair-like values and produces aview of the first elements of each pair
      (class template)(range adaptor object)[edit]
      takes aview consisting of pair-like values and produces aview of the second elements of each pair
      (class template)(range adaptor object)[edit]
      aview consisting of tuples of references to corresponding elements of the adapted views
      (class template)(customization point object)[edit]
      aview consisting of results of application of a transformation function to corresponding elements of the adapted views
      (class template)(customization point object)[edit]
      BLAS-like slice of a valarray: starting index, length, stride
      (class)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/ranges/elements_view&oldid=182450"

      [8]ページ先頭

      ©2009-2025 Movatter.jp