Namespaces
Variants

std::ranges:: views:: zip_transform, std::ranges:: zip_transform_view

From cppreference.net
Ranges library
Range adaptors
ヘッダーで定義 <ranges>
template < std:: move_constructible F, ranges:: input_range ... Views >

requires ( ranges:: view < Views > && ... ) && ( sizeof... ( Views ) > 0 ) &&
std:: is_object_v < F > && std:: regular_invocable <
F & , ranges:: range_reference_t < Views > ... > &&
/*can-reference*/ < std:: invoke_result_t <
F & , ranges:: range_reference_t < Views > ... >>
class zip_transform_view

: public ranges:: view_interface < zip_transform_view < F, Views... >>
(1) (C++23以降)
namespace views {

inline constexpr /*unspecified*/ zip_transform = /*unspecified*/ ;

}
(2) (C++23以降)
呼び出しシグネチャ
template < class F, ranges:: viewable_range ... Rs >

requires /* 下記参照 */

constexpr auto zip_transform ( F && f, Rs && ... rs ) ;
(C++23以降)
1) zip_transform_view は、呼び出し可能オブジェクトと1つ以上の view s を受け取り、その view i th 要素が、すべてのビューの i th 要素に対して呼び出し可能オブジェクトを適用した結果であるビューを生成する範囲アダプタです。
T が説明専用コンセプト /*can-reference*/ をモデル化するのは、 T& が有効な型である場合に限ります。
2) views::zip_transform はカスタマイゼーションポイントオブジェクトです。

1つの引数 f で呼び出す場合、 FD std:: decay_t < decltype ( f ) > とし、以下の条件が満たされる場合:

このとき views :: zip_transform ( f ) 式等価 です ( ( void ) f, auto ( views:: empty < std:: decay_t < std:: invoke_result_t < FD & >>> ) ) 。それ以外の場合、 views::zip_transform の呼び出しは不適格です。

2つ以上の引数 f rs... で呼び出す場合、 views :: zip_transform ( f, rs... ) 式等価 です ranges :: zip_transform_view ( f, rs... )

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}

関連項目

アダプトされたビューの対応する要素への参照のタプルからなる view
(クラステンプレート) (カスタマイゼーションポイントオブジェクト)
各要素に変換関数を適用するシーケンスの view
(クラステンプレート) (レンジアダプタオブジェクト)
tuple-like 値からなる view と数値Nを受け取り、各タプルのN th 要素の view を生成する
(クラステンプレート) (レンジアダプタオブジェクト)