Namespaces
Variants

std::span<T,Extent>:: subspan

From cppreference.net
template < std:: size_t Offset,

std:: size_t Count = std:: dynamic_extent >
constexpr std:: span < element_type, /* 아래 참조 */ >

subspan ( ) const ;
(1) (C++20 이후)
constexpr std:: span < element_type, std:: dynamic_extent >

subspan ( size_type offset,

size_type count = std:: dynamic_extent ) const ;
(2) (C++20 이후)

이 스팬의 연속된 요소들 중 일부에 대한 서브뷰를 획득합니다. 포함될 요소들은 요소 개수와 오프셋에 의해 결정됩니다.

1) 요소 개수와 오프셋은 템플릿 인자로 제공되며, 서브뷰는 Count Offset 이 모두 std:: dynamic_extent 인 경우에만 동적 범위를 가집니다.
  • 만약 Count std:: dynamic_extent 인 경우, 서브뷰는 Offset 번째 부터 시작하는 모든 요소를 포함합니다.
  • 그렇지 않으면, 서브뷰는 Count 개의 요소를 Offset 번째 부터 시작하여 포함합니다.
반환 타입의 두 번째 템플릿 인자를 FinalExtent 로 표기하며, 이는 다음과 같이 정의됩니다: Count ! = std:: dynamic_extent
? Count
: ( Extent ! = std:: dynamic_extent
? Extent - Offset
: std:: dynamic_extent )
.
만약 Offset <= Extent && ( Count == std:: dynamic_extent || Count <= Extent - Offset ) false 인 경우, 프로그램은 형식이 잘못되었습니다.

만약 Offset <= size ( ) && ( Count == std:: dynamic_extent || Count <= size ( ) - Offset ) false 인 경우, 동작은 정의되지 않습니다.

(C++26 이전)

만약 Offset <= size ( ) && ( Count == std:: dynamic_extent || Count <= size ( ) - Offset ) false 인 경우:

  • 구현이 hardened 된 경우, 계약 위반 이 발생합니다. 또한 계약 위반 핸들러가 "observe" 평가 의미론 하에 반환되면 동작은 정의되지 않습니다.
  • 구현이 hardened 되지 않은 경우, 동작은 정의되지 않습니다.
(C++26 이후)


2) 요소 개수와 오프셋이 함수 인자로 제공되며, 서브뷰는 항상 동적 범위를 가집니다.
  • 만약 count std:: dynamic_extent 인 경우, 서브뷰는 offset 번째 부터 시작하는 모든 요소를 포함합니다.
  • 그렇지 않은 경우, 서브뷰는 offset 번째 부터 시작하는 count 개의 요소를 포함합니다.

만약 offset <= size ( ) && ( count == std:: dynamic_extent || count <= size ( ) - offset ) false 인 경우, 동작은 정의되지 않습니다.

(C++26 이전)

만약 offset <= size ( ) && ( count == std:: dynamic_extent || count <= size ( ) - offset ) false 인 경우:

  • 구현이 hardened 된 경우, 계약 위반 이 발생합니다. 또한 계약 위반 핸들러가 "observe" 평가 의미론 하에 반환하는 경우, 동작은 정의되지 않습니다.
  • 구현이 hardened 되지 않은 경우, 동작은 정의되지 않습니다.
(C++26 이후)

반환값

1) std:: span < element_type, FinalExtent >
( data ( ) + Offset, Count ! = std:: dynamic_extent ? Count : size ( ) - Offset ) )
2) std:: span < element_type, std:: dynamic_extent >
( data ( ) + offset, count ! = std:: dynamic_extent ? count : size ( ) - offset ) )

예제

#include <algorithm>
#include <cstdio>
#include <numeric>
#include <ranges>
#include <span>
void display(std::span<const char> abc)
{
    const auto columns{20U};
    const auto rows{abc.size() - columns + 1};
    for (auto offset{0U}; offset < rows; ++offset)
    {
        std::ranges::for_each(abc.subspan(offset, columns), std::putchar);
        std::puts("");
    }
}
int main()
{
    char abc[26];
    std::ranges::iota(abc, 'A');
    display(abc);
}

출력:

ABCDEFGHIJKLMNOPQRST
BCDEFGHIJKLMNOPQRSTU
CDEFGHIJKLMNOPQRSTUV
DEFGHIJKLMNOPQRSTUVW
EFGHIJKLMNOPQRSTUVWX
FGHIJKLMNOPQRSTUVWXY
GHIJKLMNOPQRSTUVWXYZ

참고 항목

시퀀스의 첫 N 개 요소로 구성된 부분 스팬을 얻음
(public member function)
시퀀스의 마지막 N 개 요소로 구성된 부분 스팬을 얻음
(public member function)