std::ranges:: views:: elements, std::ranges:: elements_view
|
ヘッダで定義
<ranges>
|
||
|
template
<
ranges::
input_range
V,
std::
size_t
N
>
requires
ranges::
view
<
V
>
&&
|
(1) | (C++20以降) |
|
namespace
views
{
template
<
std::
size_t
N
>
|
(2) | (C++20以降) |
|
呼び出しシグネチャ
|
||
|
template
<
ranges::
viewable_range
R
>
requires
/* 下記参照 */
|
(C++20以降) | |
|
ヘルパーコンセプト
|
||
| (3) | ||
|
template
<
class
T,
std::
size_t
N
>
concept
/*has-tuple-element*/
=
|
(C++23まで)
( 説明専用* ) |
|
|
template
<
class
T,
std::
size_t
N
>
concept
/*has-tuple-element*/
=
|
(C++23から)
( 説明専用* ) |
|
|
template
<
class
T,
std::
size_t
N
>
concept returnable-element
=
|
(4) | ( 説明専用* ) |
views::elements
のすべての特殊化は
RangeAdaptorObject
です。式
views
::
elements
<
M
>
(
e
)
は
式等価
です
elements_view
<
views::
all_t
<
decltype
(
(
e
)
)
>
, M
>
{
e
}
に、任意の適切な部分式
e
および定数式
M
に対して。
elements_view
は、基盤となるビュー
V
がそれぞれのコンセプトをモデル化する場合、
random_access_range
、
bidirectional_range
、
forward_range
、
input_range
、
common_range
、および
sized_range
のコンセプトをモデル化します。
目次 |
データメンバ
| メンバー | 説明 |
V
base_
|
基となるビュー
( 説明専用メンバーオブジェクト* ) |
メンバー関数
elements_view
を構築する
(公開メンバ関数) |
|
|
基となる(アダプトされた)ビューのコピーを返す
(公開メンバ関数) |
|
|
先頭を指すイテレータを返す
(公開メンバ関数) |
|
|
終端を指すイテレータまたは番兵を返す
(公開メンバ関数) |
|
要素数を返す(基となる(アダプトされた)範囲が
sized_range
を満たす場合にのみ提供)
(公開メンバ関数) |
|
|
(C++26)
|
結果の
approximately_sized_range
の近似サイズを返す
(公開メンバ関数) |
std::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
th
番目の要素を返す(
random_access_range
を満たす場合にのみ提供)
(
std::ranges::view_interface<D>
の公開メンバ関数)
|
|
ネストされたクラス
|
イテレータ型
( 説明専用メンバクラステンプレート* ) |
|
|
センチネル型
( 説明専用メンバクラステンプレート* ) |
ヘルパーテンプレート
|
template
<
class
T,
std::
size_t
N
>
constexpr
bool
enable_borrowed_range
<
std
::
ranges
::
elements_view
<
T, N
>>
=
|
(C++20以降) | |
この
ranges::enable_borrowed_range
の特殊化は、基になるビューが
borrowed_range
を満たす場合に
elements_view
が
borrowed_range
を満たすようにする。
例
#include <iostream> #include <ranges> #include <string> #include <tuple> #include <vector> int main() { const std::vector<std::tuple<int, char, std::string>> vt { {1, 'A', "α"}, {2, 'B', "β"}, {3, 'C', "γ"}, {4, 'D', "δ"}, {5, 'E', "ε"}, }; for (int const e : std::views::elements<0>(vt)) std::cout << e << ' '; std::cout << '\n'; for (char const e : vt | std::views::elements<1>) std::cout << e << ' '; std::cout << '\n'; for (std::string const& e : std::views::elements<2>(vt)) std::cout << e << ' '; std::cout << '\n'; }
出力:
1 2 3 4 5 A B C D E α β γ δ ε
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 3494 | C++20 |
elements_view
は決して
borrowed_range
ではなかった
|
基になるビューが
borrowed_range
の場合、
それは
borrowed_range
である
|
| LWG 3502 | C++20 |
elements_view
からダングリング参照が取得される可能性があった
|
そのような使用法は禁止される |
関連項目
|
(C++20)
|
ペアのような値からなる
view
を受け取り、各ペアの最初の要素からなる
view
を生成する
(クラステンプレート) (range adaptor object) |
ペアのような値からなる
view
を受け取り、各ペアの2番目の要素からなる
view
を生成する
(クラステンプレート) (range adaptor object) |
|
|
(C++23)
|
アダプトされたビューの対応する要素への参照のタプルからなる
view
(クラステンプレート) (customization point object) |
アダプトされたビューの対応する要素に変換関数を適用した結果からなる
view
(クラステンプレート) (customization point object) |
|
|
valarrayのBLASライクなスライス:開始インデックス、長さ、ストライド
(クラス) |