Namespaces
Variants

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

ja.cppreference.net より
 
 
Rangesライブラリ
Rangeアダプタ
 
ヘッダで定義 <ranges>
template< ranges::view V >
    requires ranges::input_range<V>
class as_rvalue_view
    : public ranges::view_interface<as_rvalue_view<V>>
(1) (C++23以降)
namespace views {
    inline constexpr /* unspecified */ as_rvalue = /* unspecified */;
}
(2) (C++23以降)
呼び出しシグネチャ
template< ranges::viewable_range R >
    requires /* see below */
constexpr ranges::view auto as_rvalue( R&& r );
(C++23以降)
1) 要素が右辺値である基盤のviewのビューを表すrangeアダプタ。
2) RangeAdaptorObject。 eを部分式とし、Tをdecltype((e))とする。このとき、式views::as_rvalue(e)は式と等価である:
  • views::all(e)、それが適格な式である場合、Tをモデル化しinput_range、かつstd::same_as<ranges::range_rvalue_reference_t<T>, ranges::range_reference_t<T>>はtrue;
  • as_rvalue_view{e}そうでなければ。

データメンバ

メンバー 説明
V base_ (private) 基となるビュー
( 説明専用メンバーオブジェクト* )

メンバー関数

as_rvalue_viewを構築する
(public member function)
基になるビュー V を返す
(public member function)
as_rvalue_viewの先頭イテレータを返す
(public member function)
as_rvalue_viewの終端イテレータを返す
(public member function)
ビューが有界の場合にそのサイズを返す
(public member function)
基になる approximately_sized_range の近似サイズを返す
(public member function)
継承元: ranges::view_interface
派生ビューが空であるかどうかを返します。ただし、派生ビューがsized_rangeまたはforward_range
を満たす場合に限ります。(std::ranges::view_interface<D>のパブリックメンバ関数)
(C++23)
範囲の先頭を指す定数イテレータを返します。
(std::ranges::view_interface<D>のパブリックメンバ関数)
(C++23)
範囲の定数イテレータの番兵を返します。
(std::ranges::view_interface<D>のパブリックメンバ関数)
派生ビューが空でないかどうかを返します。ただし、 ranges::emptyがそれに適用可能な場合に限ります。
(std::ranges::view_interface<D>のパブリックメンバ関数)
派生ビューの最初の要素を返します。ただし、派生ビューが forward_range
を満たす場合に限ります。(std::ranges::view_interface<D>のパブリックメンバ関数)
派生ビューの最後の要素を返します。ただし、派生ビューが bidirectional_range および common_range
を満たす場合に限ります。(std::ranges::view_interface<D>のパブリックメンバ関数)
派生ビューのn番目の要素を返します。ただし、派生ビューが random_access_range
を満たす場合に限ります。(std::ranges::view_interface<D>のパブリックメンバ関数)

std::ranges::as_rvalue_view:: as_rvalue_view

as_rvalue_view ( ) requires std:: default_initializable < V > = default ;
(1) (since C++23)
constexpr explicit as_rvalue_view ( V base ) ;
(2) (since C++23)
1) デフォルトメンバ初期化子( = V ( ) )を通じて base_ を値初期化します。
2) base_ を std :: move ( base ) で初期化します。

パラメータ

base - ビュー

std::ranges::as_rvalue_view:: base

constexpr V base ( ) const & requires std:: copy_constructible < V > ;
(1) (C++23以降)
constexpr V base ( ) && ;
(2) (C++23以降)

基となるビューを返します。

1) 基となるビューから結果をコピー構築します。 return base_  ; と等価です。
2) 基となるビューから結果をムーブ構築します。 return std :: move ( base_  ) ; と等価です。

std::ranges::as_rvalue_view:: begin

constexpr auto begin ( ) requires ( ! /*simple-view*/ < V > ) ;
(1) (C++23以降)
constexpr auto begin ( ) const requires ranges:: range < const V > ;
(2) (C++23以降)

base_ の ranges:: begin ( を引数として std:: move_iterator ( を返します ) ) 。

std::ranges::as_rvalue_view:: end

constexpr auto end ( ) requires ( ! /*simple-view*/ < V > ) ;
(1) (C++23以降)
constexpr auto end ( ) const requires ranges:: range < const V > ;
(2) (C++23以降)

(1)Vまたは(2)const Vがcommon_rangeをモデル化する場合、 std:: move_iterator ( ranges:: end ( base_  ) ) を返します。

それ以外の場合、 std:: move_sentinel ( ranges:: end ( base_  ) ) を返します。

(注:指定されたテキストブロック内に翻訳対象の実際のテキスト内容が含まれていないため、HTML構造のみを保持した状態で返答しています。span要素内が空であるため、翻訳すべきテキストが存在しません。)

std::ranges::as_rvalue_view:: size

constexpr auto size ( ) requires ranges:: sized_range < V > ;
(1) (C++23以降)
constexpr auto size ( ) const requires ranges:: sized_range < const V > ;
(2) (C++23以降)

ビューが有界である場合、そのサイズを返します。次と同等です: return ranges:: size ( base_  ) ; 。

(注:元のテキストには翻訳すべき可読テキストが含まれていないため、HTML構造のみを保持しています)

std::ranges::as_rvalue_view:: reserve_hint

constexpr auto reserve_hint ( )
requires ranges :: approximately_sized_range < V > ;
(1) (C++26以降)
constexpr auto reserve_hint ( ) const
requires ranges :: approximately_sized_range < const V > ;
(2) (C++26以降)

base_  ) を返します。

推論ガイド

template < class R >
as_rvalue_view ( R && ) - > as_rvalue_view < views:: all_t < R >> ;
(C++23以降)

ヘルパーテンプレート

template < class T >

constexpr bool enable_borrowed_range < std :: ranges :: as_rvalue_view < T >> =

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

この ranges::enable_borrowed_range の特殊化は、基盤となるビューが borrowed_range を満たす場合に、 as_rvalue_view がそれを満たすようにする。

注記

機能テスト マクロ 値 標準 機能
__cpp_lib_ranges_as_rvalue 202207L (C++23) std::ranges::as_rvalue_view
__cpp_lib_ranges_reserve_hint 202502L (C++26) ranges::approximately_sized_range および reserve_hint

例

#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)); // wordsから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 << ' ';
}

出力例:

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

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 4083 C++23 views::as_rvalue は非入力レンジを受け入れていた 拒否するように変更

関連項目

(C++20)
オブジェクトをデリファレンスした結果を、関連付けられた右辺値参照型にキャストする
(カスタマイゼーションポイントオブジェクト)
右辺値にデリファレンスするイテレータアダプタ
(クラステンプレート)
std::move_iterator のためのセンチネルアダプタ
(クラステンプレート)
view を constant_range に変換する
(クラステンプレート) (レンジアダプタオブジェクト)