table of contents
        
      
      
    | std::ranges::owning_view(3) | C++ Standard Libary | std::ranges::owning_view(3) | 
NAME¶
std::ranges::owning_view - std::ranges::owning_view
Synopsis¶
 Defined in header <ranges>
  
   template< ranges::range R >
  
   requires std::movable<R> && (!/*is-initializer-list*/<R>)
    (since C++20)
  
   class owning_view
  
   : public ranges::view_interface<owning_view<R>>
  
   owning_view is a view that has unique ownership of a range. It is move-only
    and
  
   stores that range within it.
  
   The constant /*is-initializer-list*/<R> in the requires-clause is true
    if and only
  
   if std::remove_cvref_t<R> is a specialization of
  std::initializer_list.
Member functions¶
 constructor constructs an owning_view by value-initializing or
    move-constructing
  
   (C++20) the stored range
  
   (public member function)
  
   operator= move-assigns the stored range
  
   (C++20) (public member function)
  
   base returns a reference to the stored range
  
   (C++20) (public member function)
  
   begin returns the beginning iterator of the stored range
  
   (C++20) (public member function)
  
   end returns the sentinel of the stored range
  
   (C++20) (public member function)
  
   empty checks whether the stored range is empty
  
   (C++20) (public member function)
  
   size returns the size of the stored sized_range
  
   (C++20) (public member function)
  
   data returns the pointer to the beginning of the stored contiguous_range
  
   (C++20) (public member function)
  
   Inherited from std::ranges::view_interface
  
   cbegin returns a constant iterator to the beginning of the range.
  
   (C++23) (public member function of
    std::ranges::view_interface<D>)
  
   cend returns a sentinel for the constant iterator of the range.
  
   (C++23) (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 n^th 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::owning_view::owning_view
  
   owning_view() requires std::default_initializable<R> = default;
    (1) (since C++20)
  
   owning_view( owning_view&& other ) = default; (2) (since
    C++20)
  
   constexpr owning_view( R&& t ); (3) (since C++20)
  
   owning_view( const owning_view& ) = delete; (4) (since
    C++20)
  
   1) Default constructor. Value-initializes the stored range by its default
    member
  
   initializer (= R()).
  
   2) Move constructor. Move constructs the stored range from that of other.
  
   3) Move constructs the stored range from t.
  
   4) Copy constructor is deleted. owning_view is move-only.
Parameters¶
 other - another owning_view to move from
  
   t - range to move from
std::ranges::owning_view::operator=
  
   owning_view& operator=( owning_view&& other ) = default;
    (1) (since C++20)
  
   owning_view& operator=( const owning_view& ) = delete; (2)
    (since C++20)
  
   1) Move assignment operator. Move assigns the stored range from that of
    other.
  
   2) Copy assignment operator is deleted. owning_view is move-only.
Parameters¶
other - another owning_view to move from
Return value¶
*this
std::ranges::owning_view::base
  
   constexpr R& base() & noexcept; (1) (since C++20)
  
   constexpr const R& base() const & noexcept; (2) (since
    C++20)
  
   constexpr R&& base() && noexcept; (3) (since
    C++20)
  
   constexpr const R&& base() const && noexcept; (4)
    (since C++20)
  
   Returns a reference to the stored range, keeping value category and
  
   const-qualification.
  
   1,2) Equivalent to return r_;.
  
   3,4) Equivalent to return std::move(r_);.
std::ranges::owning_view::begin
  
   constexpr ranges::iterator_t<R> begin(); (1) (since
    C++20)
  
   constexpr auto begin() const requires ranges::range<const R>;
    (2) (since C++20)
  
   Equivalent to return ranges::begin(r_);.
std::ranges::owning_view::end
  
   constexpr ranges::sentinel_t<R> end(); (1) (since C++20)
  
   constexpr auto end() const requires ranges::range<const R>; (2)
    (since C++20)
  
   Equivalent to return ranges::end(r_);.
std::ranges::owning_view::empty
  
   constexpr bool empty() requires requires { ranges::empty(r_); }; (1)
    (since C++20)
  
   constexpr bool empty() const requires requires { (2) (since
    C++20)
  
   ranges::empty(r_); };
  
   Equivalent to return ranges::empty(r_);.
std::ranges::owning_view::size
  
   constexpr auto size() requires ranges::sized_range<R>; (1)
    (since C++20)
  
   constexpr auto size() const requires ranges::sized_range<const R>;
    (2) (since C++20)
  
   Equivalent to return ranges::size(r_);.
std::ranges::owning_view::data
  
   constexpr auto data() requires ranges::contiguous_range<R>; (1)
    (since C++20)
  
   constexpr auto data() const requires (2) (since C++20)
  
   ranges::contiguous_range<const R>;
  
   Equivalent to return ranges::data(r_);.
  
   Helper templates
  
   template< class T >
  
   inline constexpr bool (since C++20)
  
   enable_borrowed_range<std::ranges::owning_view<T>> =
  
   std::ranges::enable_borrowed_range<T>;
  
   This specialization of std::ranges::enable_borrowed_range makes owning_view
    satisfy
  
   borrowed_range when the underlying range satisfies it.
Example¶
// Run this code
  
   #include <cassert>
  
   #include <iostream>
  
   #include <ranges>
  
   #include <string>
  
   int main()
  
   {
  
   using namespace std::literals;
  
   std::ranges::owning_view ov{"cosmos"s}; // the deduced type of R is
    std::string;
  
   // `ov` is the only owner of this string
  
   assert(
  
   ov.empty() == false &&
  
   ov.size() == 6 &&
  
   ov.size() == ov.base().size() &&
  
   ov.front() == 'c' &&
  
   ov.front() == *ov.begin() &&
  
   ov.back() == 's' &&
  
   ov.back() == *(ov.end() - 1) &&
  
   ov.data() == ov.base()
  
   );
  
   std::cout << "sizeof(ov): " << sizeof ov << '\n'
    // typically equal to sizeof(R)
  
   << "range-for: ";
  
   for (const char ch : ov)
  
   std::cout << ch;
  
   std::cout << '\n';
  
   std::ranges::owning_view<std::string> ov2;
  
   assert(ov2.empty());
  
   // ov2 = ov; // compile-time error: copy assignment operator is deleted
  
   ov2 = std::move(ov); // OK
  
   assert(ov2.size() == 6);
  
   }
Possible output:¶
 sizeof(ov): 32
  
   range-for: cosmos
See also¶
 ranges::ref_view a view of the elements of some other range
  
   (C++20) (class template)
  
   views::all_t a view that includes all elements of a range
  
   views::all (alias template) (range adaptor object)
  
   (C++20)
| 2024.06.10 | http://cppreference.com |