std::ranges:: views:: stride, std::ranges:: stride_view
|
헤더에 정의됨
<ranges>
|
||
|
template
<
ranges::
input_range
V
>
requires
ranges::
view
<
V
>
|
(1) | (C++23부터) |
|
namespace
views
{
inline
constexpr
/* 지정되지 않음 */
stride
=
/* 지정되지 않음 */
;
|
(2) | (C++23부터) |
|
호출 시그니처
|
||
|
template
<
ranges::
viewable_range
R
>
constexpr ranges:: view auto stride ( R && r, ranges:: range_difference_t < R > n ) ; |
(C++23부터) | |
|
template
<
class
DifferenceType
>
constexpr /*레인지 어댑터 클로저*/ stride ( DifferenceType && n ) ; |
(C++23부터) | |
|
헬퍼 템플릿
|
||
stride_view
는
view
와 숫자
n
를 취하는 범위 어댑터로, 한 번에
n
개의 요소를 건너뛰며 원본 뷰의 요소들로 구성된 뷰를 생성합니다. 이는 생성된 뷰의
m
번째
요소가 음수가 아닌 인덱스
i
에 대해 원본 뷰의
(n * i)
번째
요소임을 의미합니다.
원본 뷰의 요소 중 "인덱스"가
n
의 배수가 아닌 요소들은 생성된 뷰에 존재하지 않습니다.
S
라고 하면, 생성된 뷰의 크기는 다음과 같습니다:
- ( S / n ) + ( S % n ? 1 : 0 ) , 만약 S >= n 인 경우;
- 1 , 만약 S > 0 인 경우;
- 0 , 그리고 결과 뷰는 비어 있습니다.
n
은
0
보다 커야 하며, 그렇지 않을 경우 동작은 정의되지 않습니다.
stride_view
는 항상
input_range
를 모델링하며, 적응된
view
타입
V
가 해당 개념을 모델링할 경우
forward_range
,
bidirectional_range
,
random_access_range
, 및/또는
sized_range
를 모델링합니다.
stride_view
<
V
>
는 기본 뷰
V
가 모델링할 때마다
common_range
를 모델링합니다.
목차 |
데이터 멤버
| 멤버 | 설명 |
V
base_
|
기반 뷰
( 설명 전용 멤버 객체* ) |
ranges::
range_difference_t
<
V
>
stride_
|
크기 객체 ("stride")
( 설명 전용 멤버 객체* ) |
멤버 함수
stride_view
를 생성합니다
(public 멤버 함수) |
|
|
(C++23)
|
저장된 stride 값을 반환합니다
(public 멤버 함수) |
|
기본 (적응된) 뷰의 복사본을 반환합니다
(public 멤버 함수) |
|
|
시작을 가리키는 반복자를 반환합니다
(public 멤버 함수) |
|
|
끝을 가리키는 반복자나 센티널을 반환합니다
(public 멤버 함수) |
|
기본 (적응된) 범위가
sized_range
를 만족할 때만 제공되며, 요소의 개수를 반환합니다
(public 멤버 함수) |
|
|
(C++26)
|
결과
approximately_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 멤버 함수)
|
|
추론 가이드
중첩 클래스
|
(C++23)
|
반복자 타입
( 설명 전용 멤버 클래스 템플릿* ) |
헬퍼 템플릿
|
template
<
class
V
>
constexpr
bool
ranges::
enable_borrowed_range
<
stride_view
<
V
>>
=
|
(C++23부터) | |
이
ranges::enable_borrowed_range
특수화는 기본 뷰가 이를 만족할 때
stride_view
가
borrowed_range
를 만족하도록 합니다.
참고 사항
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_ranges_stride
|
202207L
|
(C++23) |
std::ranges::stride_view
|
예제
#include <algorithm> #include <iostream> #include <ranges> #include <string_view> using namespace std::literals; void print(std::ranges::viewable_range auto&& v, std::string_view separator = " ") { for (auto const& x : v) std::cout << x << separator; std::cout << '\n'; } int main() { print(std::views::iota(1, 13) | std::views::stride(3)); print(std::views::iota(1, 13) | std::views::stride(3) | std::views::reverse); print(std::views::iota(1, 13) | std::views::reverse | std::views::stride(3)); print("0x0!133713337*x//42/A$@"sv | std::views::stride(0B11) | std::views::transform([](char O) -> char { return 0100 | O; }), ""); }
출력:
1 4 7 10 10 7 4 1 12 9 6 3 password
참조문헌
- C++23 표준 (ISO/IEC 14882:2024):
-
- 26.7.31 스트라이드 뷰 [range.stride]
참고 항목
|
(C++23)
|
다른
view
의 M
th
부터 (M + N - 1)
th
까지의 요소에 대한
view
인 M
th
요소를 가진
view
(클래스 템플릿) (range adaptor object) |
|
(C++23)
|
다른
view
의 요소들에 대한
N
크기의 겹치지 않는 연속적인 청크들로 구성된
view
s
의 범위
(클래스 템플릿) (range adaptor object) |
적응된 뷰의 인접한 요소들에 대한 참조들의 튜플로 구성된
view
(클래스 템플릿) (range adaptor object) |
|
range
의 요소들 중 조건자를 만족하는 요소들로 구성된
view
(클래스 템플릿) (range adaptor object) |