std::ranges:: owning_view
|
定義ヘッダー
<ranges>
|
||
|
template
<
ranges::
range
R
>
requires
std::
movable
<
R
>
&&
(
!
/*is-initializer-list*/
<
R
>
)
|
(C++20以降) | |
owning_view
は、
view
の一意の所有権を持つ
range
です。これはムーブのみ可能で、その
range
を内部に保持します。
requires節内の定数 /*is-initializer-list*/ < R > は、 requires 句において、 true となるのは、 std:: remove_cvref_t < R > が std::initializer_list の特殊化である場合に限ります。
データメンバ
| メンバー | 説明 |
R
r_
|
基となる範囲
( 説明専用メンバーオブジェクト* ) |
メンバー関数
owning_view
を値初期化またはムーブ構築によって構築する
(public member function) |
|
|
格納された範囲をムーブ代入する
(public member function) |
|
|
格納された範囲への参照を返す
(public member function) |
|
|
格納された範囲の先頭イテレータを返す
(public member function) |
|
|
格納された範囲のセンチネルを返す
(public member function) |
|
|
格納された範囲が空かどうかをチェックする
(public member function) |
|
格納された
sized_range
のサイズを返す
(public member function) |
|
|
(C++26)
|
格納された
approximately_sized_range
のおおよそのサイズを返す
(public member function) |
格納された
contiguous_range
の先頭へのポインタを返す
(public member function) |
|
std::ranges::view_interface から継承 |
|
|
(C++23)
|
範囲の先頭を指す定数イテレータを返す
(
std::ranges::view_interface<D>
のpublic member function)
|
|
(C++23)
|
範囲の定数イテレータのセンチネルを返す
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューが空でないかどうかを返す(
ranges::empty
が適用可能な場合のみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューの最初の要素を返す(
forward_range
を満たす場合に提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューの最後の要素を返す(
bidirectional_range
かつ
common_range
を満たす場合のみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューの
n
番目
の要素を返す(
random_access_range
を満たす場合のみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
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) |
パラメータ
| other | - |
ムーブ元の別の
owning_view
|
| t | - | ムーブ元のレンジ |
注記
owning_view
は明示的にコピーコンストラクタを定義しません。
owning_view
はムーブ専用です。
(注:指定されたテキストブロック内に翻訳対象となる可読テキストが存在しないため、HTML構造はそのまま保持されています)
std::ranges::owning_view:: operator=
|
owning_view
&
operator
=
(
owning_view
&&
other
)
=
default
;
|
(C++20以降) | |
ムーブ代入演算子。
r_
を
other
のものからムーブ代入します。
パラメータ
| other | - |
ムーブ元の別の
owning_view
|
戻り値
* this
注記
owning_view
は明示的にコピー代入演算子を定義しません。
owning_view
はムーブ専用です。
std::ranges::owning_view:: base
|
constexpr
R
&
base
(
)
&
noexcept
;
|
(1) | (C++20以降) |
|
constexpr
const
R
&
base
(
)
const
&
noexcept
;
|
(2) | (C++20以降) |
|
constexpr
R
&&
base
(
)
&&
noexcept
;
|
(3) | (C++20以降) |
|
constexpr
const
R
&&
base
(
)
const
&&
noexcept
;
|
(4) | (C++20以降) |
格納されている範囲への参照を返します。値カテゴリとconst修飾を保持します。
戻り値
r_
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) |
ranges::begin(r_)
を返します。
std::ranges::owning_view:: end
|
constexpr
ranges::
sentinel_t
<
R
>
end
(
)
;
|
(1) | (C++20以降) |
|
constexpr
auto
end
(
)
const
requires
ranges::
range
<
const
R
>
;
|
(2) | (C++20以降) |
r_
に対する
ranges::
end
(
r_
)
を返します。
std::ranges::owning_view:: empty
|
constexpr
bool
empty
(
)
requires requires
{
ranges::
empty
(
r_
)
;
}
;
|
(1) | (C++20以降) |
|
constexpr
bool
empty
(
)
const
requires requires
{
ranges::
empty
(
r_
)
;
}
;
|
(2) | (C++20以降) |
ranges::
empty
(
r_
)
を返します。
std::ranges::owning_view:: size
|
constexpr
auto
size
(
)
requires
ranges::
sized_range
<
R
>
;
|
(1) | (C++20以降) |
|
constexpr
auto
size
(
)
const
requires
ranges::
sized_range
<
const
R
>
;
|
(2) | (C++20以降) |
r_
の
ranges::
size
(
r_
)
を返します。
(注:元のテキストには翻訳対象となる可読テキストが含まれていないため、HTML構造のみを保持しています)
std::ranges::owning_view:: reserve_hint
|
constexpr
auto
reserve_hint
(
)
requires ranges :: approximately_sized_range < R > ; |
(1) | (C++26以降) |
|
constexpr
auto
reserve_hint
(
)
const
requires ranges :: approximately_sized_range < const R > ; |
(2) | (C++26以降) |
ranges
::
reserve_hint
(
r_
)
を返します。
(注:元のテキストには翻訳対象となる実際のコンテンツが含まれていないため、HTML構造のみを保持したまま出力しています。実際の翻訳対象テキストが タグ内に存在する場合、指定されたルールに従って翻訳を行います)
std::ranges::owning_view:: data
|
constexpr
auto
data
(
)
requires
ranges::
contiguous_range
<
R
>
;
|
(1) | (C++20以降) |
|
constexpr
auto
data
(
)
const
requires
ranges::
contiguous_range
<
const
R
>
;
|
(2) | (C++20以降) |
ranges::data(r_)
を返します。
ヘルパーテンプレート
|
template
<
class
T
>
constexpr
bool
enable_borrowed_range
<
std
::
ranges
::
owning_view
<
T
>>
=
|
(C++20以降) | |
この
ranges::
enable_borrowed_range
の特殊化は、基となるrangeが
borrowed_range
を満たす場合に
owning_view
が
borrowed_range
を満たすようにします。
注記
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_ranges_reserve_hint
|
202502L
|
(C++26) |
ranges::approximately_sized_range
および
reserve_hint
|
例
#include <cassert> #include <iostream> #include <ranges> #include <string> int main() { using namespace std::literals; std::ranges::owning_view ov{"cosmos"s}; // 推論されるRの型はstd::string; // 「ov」はこの文字列の唯一の所有者 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' // 通常は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; // コンパイル時エラー: コピー代入演算子は削除されている ov2 = std::move(ov); // OK assert(ov2.size() == 6); }
出力例:
sizeof(ov): 32 range-for: cosmos
関連項目
|
(C++20)
|
他の
range
の要素を参照する
view
(クラステンプレート) |
|
(C++20)
|
range
のすべての要素を含む
view
(エイリアステンプレート) (range adaptor object) |