Namespaces
Variants

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

cppreference.net에서
 
 
범위 라이브러리
범위 어댑터
 
 
헤더 <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 /* unspecified */ stride = /* unspecified */;
}
(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 /*range adaptor closure*/ stride( DifferenceType&& n );
(C++23부터)
헬퍼 템플릿
1) stride_view는 view와 숫자 n을 받아서, 매번 n개의 요소씩 건너뛰며 원본 뷰의 요소들로 구성된 뷰를 생성하는 범위 어댑터입니다. 즉, 생성된 뷰의 각 m번째 요소는 어떤 음이 아닌 인덱스 (n * i)에 대해 원본 뷰의 번째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)은 표현식-동등(expression-equivalent)하여 stride_view(e, n)입니다.
n은 0보다 커야 합니다. 그렇지 않으면 동작이 정의되지 않습니다.

stride_view는 항상 input_range를 모델링하며, 적응된 view 타입 이 해당 콘셉트를 모델링하는 경우 forward_range, bidirectional_range, random_access_range, 그리고/또는 sized_rangeV를 모델링합니다. stride_view<V>는 기본 뷰 가 모델링할 때마다 common_rangeV를 모델링합니다.

같이 보기

데이터 멤버

멤버 설명
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 멤버 함수)
ranges::view_interface
|emptysized_range 또는 forward_range
를 만족하는 경우에만 파생 뷰가 비어 있는지 반환합니다 (std::ranges::view_interface<D>의 공개 멤버 함수)
(C++23)
범위의 시작을 가리키는 상수 반복자를 반환합니다
(std::ranges::view_interface<D>의 공개 멤버 함수)
(C++23)
범위의 상수 반복자에 대한 센티널을 반환합니다
(std::ranges::view_interface<D>의 공개 멤버 함수)
파생 뷰가 비어 있지 않은지 반환합니다. ranges::empty가 적용 가능한 경우에만 해당합니다
(std::ranges::view_interface<D>의 공개 멤버 함수)
파생 뷰의 첫 번째 요소를 반환합니다. forward_range
를 만족하는 경우에만 해당합니다 (std::ranges::view_interface<D>의 공개 멤버 함수)
파생 뷰의 마지막 요소를 반환합니다. bidirectional_range과 common_range
를 모두 만족하는 경우에만 해당합니다 (std::ranges::view_interface<D>의 공개 멤버 함수)
파생 뷰의 n번째 요소를 반환합니다. random_access_range
를 만족하는 경우에만 해당합니다 (std::ranges::view_interface<D>의 공개 멤버 함수)
|

추론 가이드

중첩 클래스

(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)