std::ranges:: views:: zip, std::ranges:: zip_view
|
헤더에 정의됨
<ranges>
|
||
|
template
<
ranges::
input_range
...
Views
>
requires
(
ranges::
view
<
Views
>
&&
...
)
&&
(
sizeof...
(
Views
)
>
0
)
|
(1) | (C++23부터) |
|
namespace
views
{
inline
constexpr
/*unspecified*/
zip
=
/*unspecified*/
;
|
(2) | (C++23부터) |
|
호출 시그니처
|
||
|
template
<
ranges::
viewable_range
...
Rs
>
requires
/* see below */
|
(C++23부터) | |
zip_view
는 하나 이상의
view
s
를 취하는 범위 어댑터이며,
view
를 생성합니다. 이때 생성된 뷰의
i
번째 요소는 모든 뷰의
i
번째
요소들로 구성된 튜플 형태의 값입니다. 생성된 뷰의 크기는 모든 적용된 뷰들의 크기 중 최소값입니다.
views::zip
는 사용자 정의 지점 객체입니다.
인수 없이 호출할 경우,
views
::
zip
(
)
는
표현식 동등
합니다
auto
(
views::
empty
<
std::
tuple
<>>
)
에.
zip_view
는 항상
input_range
를 모델하며, 모든 적응된
view
타입들이 해당 개념을 모델할 경우
forward_range
,
bidirectional_range
,
random_access_range
, 또는
sized_range
를 모델합니다.
zip_view
는 다음의 경우
common_range
를 모델링합니다
-
sizeof...
(
Views
)
가
1
과 같고, 유일한 적응된 뷰 타입이
common_range을 모델링하거나, -
적어도 하나의 적응된 뷰 타입이
bidirectional_range을 모델링하지 않으며, 모든 적응된 뷰 타입이common_range을 모델링하거나, -
모든 적응된 뷰 타입이
random_access_range와sized_range모두를 모델링하는 경우.
목차 |
커스터마이제이션 포인트 객체
views::zip
이름은
커스터마이제이션 포인트 객체
를 나타내며, 이는
함수 객체
의 상수
리터럴
semiregular
클래스 타입입니다. 자세한 내용은
CustomizationPointObject
를 참조하십시오.
데이터 멤버
| 멤버 | 설명 |
std::
tuple
<
Views...
>
views_
|
모든 적응된 뷰 객체들
( 설명 전용 멤버 객체* ) |
멤버 함수
zip_view
를 생성합니다
(public 멤버 함수) |
|
|
시작 부분을 가리키는 반복자를 반환합니다
(public 멤버 함수) |
|
|
끝 부분을 가리키는 반복자나 센티널을 반환합니다
(public 멤버 함수) |
|
각 기본 (적응된) 범위가
sized_range
를 만족하는 경우에만 제공되는 요소 개수를 반환합니다
(public 멤버 함수) |
|
std::ranges::view_interface 로부터 상속됨 |
|
파생된 뷰가
sized_range
나
forward_range
를 만족하는 경우에만 제공되는, 파생된 뷰가 비어 있는지 여부를 반환합니다
(
std::ranges::view_interface<D>
의 public 멤버 함수)
|
|
|
(C++23)
|
범위의 시작을 가리키는 상수 반복자를 반환합니다
(
std::ranges::view_interface<D>
의 public 멤버 함수)
|
|
(C++23)
|
범위의 상수 반복자에 대한 센티널을 반환합니다
(
std::ranges::view_interface<D>
의 public 멤버 함수)
|
|
ranges::empty
가 적용 가능한 경우에만 제공되는, 파생된 뷰가 비어 있지 않은지 여부를 반환합니다
(
std::ranges::view_interface<D>
의 public 멤버 함수)
|
|
forward_range
를 만족하는 경우에만 제공되는, 파생된 뷰의 첫 번째 요소를 반환합니다
(
std::ranges::view_interface<D>
의 public 멤버 함수)
|
|
bidirectional_range
와
common_range
를 만족하는 경우에만 제공되는, 파생된 뷰의 마지막 요소를 반환합니다
(
std::ranges::view_interface<D>
의 public 멤버 함수)
|
|
random_access_range
를 만족하는 경우에만 제공되는, 파생된 뷰의
n
번째
요소를 반환합니다
(
std::ranges::view_interface<D>
의 public 멤버 함수)
|
|
추론 가이드
중첩 클래스
|
반복자 타입
( 설명 전용 멤버 클래스 템플릿* ) |
|
zip_view
가
common_range
가 아닐 때 사용되는 센티넬 타입
( 설명 전용 멤버 클래스 템플릿* ) |
헬퍼 템플릿
|
template
<
class
...
Views
>
constexpr
bool
enable_borrowed_range
<
ranges
::
zip_view
<
Views...
>>
=
|
(C++23부터) | |
ranges::enable_borrowed_range
의 이 특수화는 모든 기반 뷰가 이를 만족할 때
zip_view
가
borrowed_range
를 만족하도록 합니다.
참고 사항
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_ranges_zip
|
202110L
|
(C++23) |
ranges::zip_view
,
ranges:: zip_transform_view , ranges:: adjacent_view , ranges:: adjacent_transform_view |
예제
#include <array> #include <iostream> #include <list> #include <ranges> #include <string> #include <tuple> #include <vector> void print(auto const rem, auto const& range) { for (std::cout << rem; auto const& elem : range) std::cout << elem << ' '; std::cout << '\n'; } int main() { auto x = std::vector{1, 2, 3, 4}; auto y = std::list<std::string>{"α", "β", "γ", "δ", "ε"}; auto z = std::array{'A', 'B', 'C', 'D', 'E', 'F'}; print("Source views:", ""); print("x: ", x); print("y: ", y); print("z: ", z); print("\nzip(x,y,z):", ""); for (std::tuple<int&, std::string&, char&> elem : std::views::zip(x, y, z)) { std::cout << std::get<0>(elem) << ' ' << std::get<1>(elem) << ' ' << std::get<2>(elem) << '\n'; std::get<char&>(elem) += ('a' - 'A'); // z의 요소를 수정합니다 } print("\nAfter modification, z: ", z); }
출력:
Source views: x: 1 2 3 4 y: α β γ δ ε z: A B C D E F zip(x,y,z): 1 α A 2 β B 3 γ C 4 δ D After modification, z: a b c d E F
참고 항목
변환 함수를 적용된 뷰들의 대응되는 요소들에 적용한 결과로 구성된
view
(클래스 템플릿) (커스터마이제이션 포인트 객체) |
|
tuple-like
값들로 구성된
view
와 숫자 N을 취하여 각 튜플의 N
th
요소들의
view
를 생성함
(클래스 템플릿) (레인지 어댑터 객체) |