Namespaces
Variants

std::ranges:: views:: stride, std::ranges:: stride_view

From cppreference.net
Ranges library
Range adaptors
헤더에 정의됨 <ranges>
template < ranges:: input_range V >

requires ranges:: view < V >
class stride_view

: public ranges:: view_interface < stride_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부터)
헬퍼 템플릿
1) stride_view view 와 숫자 n 를 취하는 범위 어댑터로, 한 번에 n 개의 요소를 건너뛰며 원본 뷰의 요소들로 구성된 뷰를 생성합니다. 이는 생성된 뷰의 m 번째 요소가 음수가 아닌 인덱스 i 에 대해 원본 뷰의 (n * i) 번째 요소임을 의미합니다. 원본 뷰의 요소 중 "인덱스"가 n 의 배수가 아닌 요소들은 생성된 뷰에 존재하지 않습니다.
원본 뷰의 크기를 S 라고 하면, 생성된 뷰의 크기는 다음과 같습니다:
  • ( S / n ) + ( S % n ? 1 : 0 ) , 만약 S >= n 인 경우;
  • 1 , 만약 S > 0 인 경우;
  • 0 , 그리고 결과 뷰는 비어 있습니다.
2) 이름 views :: stride RangeAdaptorObject 를 나타냅니다. 부분 표현식 e n 이 주어졌을 때, 표현식 views :: stride ( e, n ) 표현식 동등 으로 stride_view ( e, n ) 입니다.
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 멤버 함수)
결과 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 >> =

ranges:: enable_borrowed_range < 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]

참고 항목

다른 view 의 M th 부터 (M + N - 1) th 까지의 요소에 대한 view 인 M th 요소를 가진 view
(클래스 템플릿) (range adaptor object)
다른 view 의 요소들에 대한 N 크기의 겹치지 않는 연속적인 청크들로 구성된 view s 의 범위
(클래스 템플릿) (range adaptor object)
적응된 뷰의 인접한 요소들에 대한 참조들의 튜플로 구성된 view
(클래스 템플릿) (range adaptor object)
range 의 요소들 중 조건자를 만족하는 요소들로 구성된 view
(클래스 템플릿) (range adaptor object)