ranges_subrange
ranges_subrange (하위 범위)
std::ranges::subrange은 반복자와 센티널 쌍으로 표현되는 범위의 하위 범위를 나타내는 클래스 템플릿이에요. C++20부터 사용할 수 있어요.
출처: cppreference
본문
<ranges> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.
template<
std::input_or_output_iterator I,
std::sentinel_for<I> S = I,
ranges::subrange_kind K = std::sized_sentinel_for<S, I> ?
ranges::subrange_kind::sized :
ranges::subrange_kind::unsized >
requires (K == ranges::subrange_kind::sized || !std::sized_sentinel_for<S, I>)
class subrange
: public ranges::view_interface<subrange<I, S, K>>
(since C++20)
std::ranges::subrange은 반복자 I와 센티널 S로 경계 지어진 하위 범위를 나타내는 뷰예요.
멤버 타입 (Member types)
| 멤버 타입 | 정의 |
|---|---|
| iterator | I |
| sentinel | S |
| iterator_concept | K == sized면 std::input_iterator, 아니면 std::input_or_output_iterator |
| iterator_category | 존재한다면 std::input_iterator_tag |
멤버 함수 (Member functions)
- (constructor) — subrange 생성 (begin/end 반복자 쌍, 범위, 또는 정수 크기와 함께)
- operator= — 내용 할당
- begin — 시작 반복자 반환
- end — 센티널 반환
- size — 요소 수 반환 (sized일 때)
- advance / next / prev — 반복자 오프셋 (사용 중단)
- first / second — 구조적 바인딩용 begin/end 반환
- operator bool — 범위가 비어 있지 않은지 확인
비멤버 함수 (Non-member functions)
- get(I) / get(S) — 구조적 바인딩 지원
- std::tuple_size, std::tuple_element — 구조적 바인딩 지원
참고 (Notes)
subrange는 borrowed_range이고 view예요. 반복자-센티널 쌍을 좁게 표준화된 형태로 담아, 구조적 바인딩과 알고리즘 매개변수로 쓰기 좋아요.