Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::ranges::view_interface

      From cppreference.com
      <cpp‎ |ranges
       
       
      Ranges library
      Views
      view_interface
        

      Range adaptors
       
       
      Defined in header<ranges>
      template<class D>

          requiresstd::is_class_v<D>&&std::same_as<D,std::remove_cv_t<D>>

      class view_interface;
      (since C++20)

      std::ranges::view_interface is a helper class template for defining a view interface.

      view_interface is typically used withCRTP:

      class my_view:public std::ranges::view_interface<my_view>{public:auto begin()const{/*...*/}auto end()const{/*...*/}// empty() is provided if begin() returns a forward iterator// and end() returns a sentinel for it.};

      Contents

      [edit]Member functions

      returns whether the derived view is empty, provided only if it satisfiessized_range orforward_range
      (public member function)[edit]
      (C++23)
      returns a constant iterator to the beginning of the range
      (public member function)[edit]
      (C++23)
      returns a sentinel for the constant iterator of the range
      (public member function)[edit]
      returns whether the derived view is not empty, provided only ifranges::empty is applicable to it
      (public member function)[edit]
      gets the address of derived view's data, provided only if its iterator type satisfiescontiguous_iterator
      (public member function)[edit]
      returns the number of elements in the derived view. Provided if it satisfiesforward_range and its sentinel and iterator type satisfysized_sentinel_for.
      (public member function)[edit]
      returns the first element in the derived view, provided if it satisfiesforward_range
      (public member function)[edit]
      returns the last element in the derived view, provided only if it satisfiesbidirectional_range andcommon_range
      (public member function)[edit]
      returns thenth element in the derived view, provided only if it satisfiesrandom_access_range
      (public member function)[edit]

      [edit]Example

      Run this code
      #include <iostream>#include <ranges>#include <vector> template<class T,class A>class VectorView:public std::ranges::view_interface<VectorView<T, A>>{public:    VectorView()=default;     VectorView(conststd::vector<T, A>& vec):        m_begin(vec.cbegin()), m_end(vec.cend()){} auto begin()const{return m_begin;} auto end()const{return m_end;} private:typenamestd::vector<T, A>::const_iterator m_begin{}, m_end{};}; int main(){std::vector<int> v={1,4,9,16};     VectorView view_over_v{v}; // We can iterate with begin() and end().for(int n: view_over_v)std::cout<< n<<' ';std::cout<<'\n'; // We get operator[] for free when inheriting from view_interface// since we satisfy the random_access_range concept.for(std::ptrdiff_t i=0; i!= view_over_v.size();++i)std::cout<<"v["<< i<<"] = "<< view_over_v[i]<<'\n';}

      Output:

      1 4 9 16v[0] = 1v[1] = 4v[2] = 9v[3] = 16

      [edit]Defect reports

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

      DRApplied toBehavior as publishedCorrect behavior
      LWG 3549C++20view_interface was required to be derived fromview_base,
      which sometimes required multipleview_base subobjects in a view
      inheritance removed

      [edit]See also

      combines an iterator-sentinel pair into aview
      (class template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/ranges/view_interface&oldid=160961"

      [8]ページ先頭

      ©2009-2025 Movatter.jp