Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::ranges::views::as_rvalue,std::ranges::as_rvalue_view

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

          requiresranges::input_range<V>
      class as_rvalue_view

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

         inlineconstexpr/* unspecified */ as_rvalue=/* unspecified */;

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

          requires/* see below */

      constexprranges::viewauto as_rvalue( R&& r);
      (since C++23)
      1) A range adaptor that represents a view of underlyingview whose elements are rvalues.
      2)RangeAdaptorObject. Lete be a subexpression and letT bedecltype((e)). Then the expressionviews::as_rvalue(e) isexpression-equivalent to:

      Contents

      [edit]Data members

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

      [edit]Member functions

      constructs anas_rvalue_view
      (public member function)
      returns the underlying viewV
      (public member function)
      returns the beginning iterator of theas_rvalue_view
      (public member function)
      returns the end iterator of theas_rvalue_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::as_rvalue_view::as_rvalue_view

      as_rvalue_view() requiresstd::default_initializable<V>=default;
      (1)(since C++23)
      constexprexplicit as_rvalue_view( V base);
      (2)(since C++23)
      1) Value-initializesbase_ via its default member initializer (= V()).
      2) Initializesbase_ withstd::move(base).

      Parameters

      base - a view

      std::ranges::as_rvalue_view::base

      constexpr V base()const& requiresstd::copy_constructible<V>;
      (1)(since C++23)
      constexpr V base()&&;
      (2)(since C++23)

      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::as_rvalue_view::begin

      constexprauto begin() requires(!/*simple-view*/<V>);
      (1)(since C++23)
      constexprauto begin()const requiresranges::range<const V>;
      (2)(since C++23)

      Returnsstd::move_iterator(ranges::begin(base_ )).

      std::ranges::as_rvalue_view::end

      constexprauto end() requires(!/*simple-view*/<V>);
      (1)(since C++23)
      constexprauto end()const requiresranges::range<const V>;
      (2)(since C++23)

      Returnsstd::move_iterator(ranges::end(base_ )) if(1)V or(2)const V modelscommon_range.

      Returnsstd::move_sentinel(ranges::end(base_ )) otherwise.

      std::ranges::as_rvalue_view::size

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

      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>
      as_rvalue_view( R&&)-> as_rvalue_view<views::all_t<R>>;
      (since C++23)

      [edit]Helper templates

      template<class T>

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

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

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

      [edit]Notes

      Feature-test macroValueStdFeature
      __cpp_lib_ranges_as_rvalue202207L(C++23)std::ranges::as_rvalue_view
      __cpp_lib_ranges_reserve_hint202502L(C++26)ranges::approximately_sized_range andreserve_hint

      [edit]Example

      Run this code
      #include <algorithm>#include <iostream>#include <ranges>#include <string>#include <vector> int main(){std::vector<std::string> words={"Quick","red","\N{FOX FACE}","jumped","over","a","pterodactyl"};std::vector<std::string> new_words;     std::ranges::copy(        words| std::views::as_rvalue,std::back_inserter(new_words));// move string from words into new_words auto quoted= std::views::transform([](auto&& s){return"“"+ s+"”";}); std::cout<<"Old words: ";for(auto&& word: words| std::views::as_rvalue| quoted)std::cout<< word<<' '; std::cout<<"\nNew words: ";for(auto&& word: new_words| std::views::as_rvalue| quoted)std::cout<< word<<' ';}

      Possible output:

      Old words: “” “” “” “” “” “” “” New words: “Quick” “red” “🦊” “jumped” “over” “a” “pterodactyl”

      [edit]Defect reports

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

      DRApplied toBehavior as publishedCorrect behavior
      LWG 4083C++23views::as_rvalue used to accept non-input rangesmade rejected

      [edit]See also

      (C++20)
      casts the result of dereferencing an object to its associated rvalue reference type
      (customization point object)[edit]
      iterator adaptor which dereferences to an rvalue
      (class template)[edit]
      sentinel adaptor forstd::move_iterator
      (class template)[edit]
      converts aview into aconstant_range
      (class template)(range adaptor object)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/ranges/as_rvalue_view&oldid=182380"

      [8]ページ先頭

      ©2009-2025 Movatter.jp