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 는 호출 가능 객체와 하나 이상의 view s 를 취하는 범위 어댑터이며, view 를 생성합니다. 이 view의 i th 번째 요소는 호출 가능 객체를 모든 view들의 i th 번째 요소들에 적용한 결과입니다.
타입 T 가 전시용(exposition-only) 개념 /*can-reference*/ 을 모델링하는 것은 T& 가 유효한 타입일 때에만 해당합니다.
2) views::zip_transform 는 사용자 정의 지점 객체입니다.

하나의 인수 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 호출은 잘못된 형식입니다.

둘 이상의 인수 f rs... 로 호출할 때, views :: zip_transform ( f, rs... ) 표현식 동등 하게 ranges :: zip_transform_view ( f, rs... ) 입니다.

zip_transform_view 는 기본 ranges:: zip_view < Views... > 가 해당 개념들을 모델링할 때 random_access_range , bidirectional_range , forward_range , input_range , common_range , 그리고 sized_range 개념들을 모델링합니다.

목차

커스터마이제이션 포인트 객체

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 가 아닐 때 사용되는 sentinel 타입
( 설명 전용 멤버 클래스 템플릿* )

참고 사항

기능 테스트 매크로 표준 기능
__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 를 생성함
(클래스 템플릿) (레인지 어댑터 객체)