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
는 호출 가능 객체와 하나 이상의
view
s
를 취하는 범위 어댑터이며,
view
를 생성합니다. 이 view의
i
th
번째 요소는 호출 가능 객체를 모든 view들의
i
th
번째 요소들에 적용한 결과입니다.
타입
T
가 전시용(exposition-only) 개념
/*can-reference*/
을 모델링하는 것은
T&
가 유효한 타입일 때에만 해당합니다.
views::zip_transform
는 사용자 정의 지점 객체입니다.
하나의 인수
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
는 기본
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}
참고 항목
|
(C++23)
|
적응된 뷰들의 대응하는 요소들에 대한 참조의 튜플로 구성된
view
(클래스 템플릿) (커스터마이제이션 포인트 객체) |
각 요소에 변환 함수를 적용하는 시퀀스의
view
(클래스 템플릿) (레인지 어댑터 객체) |
|
tuple-like
값들로 구성된
view
와 숫자 N을 취하여 각 튜플의 N
th
요소의
view
를 생성함
(클래스 템플릿) (레인지 어댑터 객체) |