std::ranges::views::elements, std::ranges::elements_view
| ヘッダ <ranges>
|
||
template< ranges::input_range V, std::size_t N >
requires ranges::view<V> &&
/*has-tuple-element*/<ranges::range_value_t<V>, N> &&
/*has-tuple-element*/<std::remove_reference_t<
ranges::range_reference_t<V>>, N> &&
/*returnable-element*/<ranges::range_reference_t<V>, N>
class elements_view
: public ranges::view_interface<elements_view<V, N>>;
|
で定義 | (1) |
namespace views {
template< std::size_t N >
constexpr /* unspecified */ elements = /* unspecified */;
}
|
(C++20 以上) | (2) |
| (C++20 以上) |
||
template< ranges::viewable_range R >
requires /* see below */
constexpr ranges::view auto elements<N>( R&& r );
|
呼び出しシグネチャ | |
| (C++20 以上) |
||
template< class T, std::size_t N >
concept /*has-tuple-element*/ =
requires(T t) {
typename std::tuple_size<T>::type;
requires N < std::tuple_size_v<T>;
typename std::tuple_element_t<N, T>;
{ std::get<N>(t) } -> std::convertible_to<
const std::tuple_element_t<N, T>&>;
};
|
ヘルパコンセプト | (3) (C++23 まで)(説明専用* |
template< class T, std::size_t N >
concept /*has-tuple-element*/ =
/*tuple-like*/<T> && N < std::tuple_size_v<T>
|
) (C++23 以上)(説明専用* |
|
template< class T, std::size_t N >
concept returnable-element =
std::is_reference_v<T> || std::move_constructible<
std::tuple_element_t<N, T>>;
|
) | (4) (説明専用* |
views::elements のすべての特殊化はRangeAdaptorObjectです。式 views::elements<M>(e) は、任意の適切な部分式 と定数式 に対して、elements_view<views::all_t<decltype((e))>, M>{e} とe式等価Mです。elements_view は、元となる view がそれぞれのコンセプトをモデル化する場合に、random_access_range、bidirectional_range、forward_range、input_range、common_range、sized_rangeV の各コンセプトをモデル化します。
データメンバ
| メンバー | 説明 |
V
base_
|
基となるビュー
( 説明専用メンバーオブジェクト* ) |
メンバー関数
elements_viewを構築する
(公開メンバ関数) |
|
|
基となる(アダプトされた)ビューのコピーを返す
(公開メンバ関数) |
|
|
先頭を指すイテレータを返す
(公開メンバ関数) |
|
|
終端を指すイテレータまたは番兵を返す
(公開メンバ関数) |
|
要素数を返す(基となる(アダプトされた)範囲が
sized_range
を満たす場合にのみ提供)
(公開メンバ関数) |
|
|
(C++26)
|
結果の
approximately_sized_range
の近似サイズを返す
(公開メンバ関数) |
ranges::view_interface | |
| empty派生ビューが空かどうかを返す。ただし、それが sized_range または forward_range std::ranges::view_interface<D> を満たす場合のみ有効。(
| |
cbegin |
(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> のパブリックメンバ関数)
| |
ネストされたクラス
|
イテレータ型
( 説明専用メンバクラステンプレート* ) |
|
|
センチネル型
( 説明専用メンバクラステンプレート* ) |
ヘルパーテンプレート
|
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ライクなスライス:開始インデックス、長さ、ストライド
(クラス) |