std::ranges:: views:: zip_transform, std::ranges:: zip_transform_view
|
ヘッダーで定義
<ranges>
|
||
|
template
<
std::
move_constructible
F,
ranges::
input_range
...
Views
>
requires
(
ranges::
view
<
Views
>
&&
...
)
&&
(
sizeof...
(
Views
)
>
0
)
&&
|
(1) | (C++23以降) |
|
namespace
views
{
inline
constexpr
/*unspecified*/
zip_transform
=
/*unspecified*/
;
|
(2) | (C++23以降) |
|
呼び出しシグネチャ
|
||
|
template
<
class
F,
ranges::
viewable_range
...
Rs
>
requires
/* 下記参照 */
|
(C++23以降) | |
zip_transform_view
は、呼び出し可能オブジェクトと1つ以上の
view
s
を受け取り、その
view
の
i
th
要素が、すべてのビューの
i
th
要素に対して呼び出し可能オブジェクトを適用した結果であるビューを生成する範囲アダプタです。
型
T
が説明専用コンセプト
/*can-reference*/
をモデル化するのは、
T&
が有効な型である場合に限ります。
views::zip_transform
はカスタマイゼーションポイントオブジェクトです。
1つの引数
f
で呼び出す場合、
FD
を
std::
decay_t
<
decltype
(
f
)
>
とし、以下の条件が満たされる場合:
-
FDがcopy_constructibleコンセプトをモデル化し、 -
FD
&
が
regular_invocableコンセプトをモデル化し、 - std:: invoke_result_t < FD & > がオブジェクト型である場合、
このとき
views
::
zip_transform
(
f
)
は
式等価
です
(
(
void
)
f,
auto
(
views::
empty
<
std::
decay_t
<
std::
invoke_result_t
<
FD
&
>>>
)
)
。それ以外の場合、
views::zip_transform
の呼び出しは不適格です。
zip_transform_view
は、
random_access_range
、
bidirectional_range
、
forward_range
、
input_range
、
common_range
、および
sized_range
の各コンセプトを満たす。ただし、これは基盤となる
ranges::
zip_view
<
Views...
>
がそれぞれ対応するコンセプトを満たす場合に限る。
目次 |
カスタマイゼーションポイントオブジェクト
views::zip_transform
という名前は
カスタマイゼーションポイントオブジェクト
を表します。これは
関数オブジェクト
の const で
リテラル
semiregular
クラス型です。詳細は
CustomizationPointObject
を参照してください。
メンバー関数
zip_transform_view
を構築する
(public member function) |
|
|
先頭を指すイテレータを返す
(public member function) |
|
|
終端を指すイテレータまたはセンチネルを返す
(public member function) |
|
各基盤となる(適合された)範囲が
sized_range
を満たす場合にのみ提供される要素数を返す
(public member function) |
|
std::ranges::view_interface から継承 |
|
派生ビューが空かどうかを返す(
sized_range
または
forward_range
を満たす場合にのみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
|
(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)
|
|
推論ガイド
メンバー型
| メンバー型 | 定義 |
InnerView
(private)
|
ranges::
zip_view
<
Views...
>
型。
( 説明専用メンバー型* ) |
ziperator
(private)
|
|
zentinel
(private)
|
|
データメンバ
| メンバオブジェクト | 定義 |
zip_
(private)
|
InnerView
型の基盤となるビューオブジェクト
( 説明専用メンバオブジェクト* ) |
fun_
(private)
|
movable-box
<F>
型のラップされた呼び出し可能オブジェクト
( 説明専用メンバオブジェクト* ) |
ネストされたクラス
|
イテレータ型
( 説明専用メンバクラステンプレート* ) |
|
基となる
zip_view
が
common_range
でない場合に使用されるセンチネル型
( 説明専用メンバクラステンプレート* ) |
注記
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_ranges_zip
|
202110L
|
(C++23) |
ranges::
zip_view
,
std::ranges::zip_transform_view
,
ranges:: adjacent_view , ranges:: adjacent_transform_view |
例
#include <array> #include <iostream> #include <list> #include <ranges> #include <vector> void print(auto const rem, auto const& r) { std::cout << rem << '{'; for (char o[]{0,' ',0}; auto const& e : r) std::cout << o << e, *o = ','; std::cout << "}\n"; } int main() { auto v1 = std::vector<float>{1, 2, 3}; auto v2 = std::list<short>{1, 2, 3, 4}; auto v3 = std::to_array({1, 2, 3, 4, 5}); auto add = [](auto a, auto b, auto c) { return a + b + c; }; auto sum = std::views::zip_transform(add, v1, v2, v3); print("v1: ", v1); print("v2: ", v2); print("v3: ", v3); print("sum: ", sum); }
出力:
v1: {1, 2, 3}
v2: {1, 2, 3, 4}
v3: {1, 2, 3, 4, 5}
sum: {3, 6, 9}
関連項目
|
(C++23)
|
アダプトされたビューの対応する要素への参照のタプルからなる
view
(クラステンプレート) (カスタマイゼーションポイントオブジェクト) |
各要素に変換関数を適用するシーケンスの
view
(クラステンプレート) (レンジアダプタオブジェクト) |
|
tuple-like
値からなる
view
と数値Nを受け取り、各タプルのN
th
要素の
view
を生成する
(クラステンプレート) (レンジアダプタオブジェクト) |