Namespaces
Variants

std::ranges:: get (std::ranges::subrange)

From cppreference.net
Ranges library
Range adaptors
헤더에 정의됨 <ranges>
template < std:: size_t N, class I, class S, ranges:: subrange_kind K >

requires ( ( N == 0 && std:: copyable < I > ) || N == 1 )

constexpr auto get ( const ranges:: subrange < I, S, K > & r ) ;
(1) (C++20부터)
template < std:: size_t N, class I, class S, ranges:: subrange_kind K >

requires ( N < 2 )

constexpr auto get ( ranges:: subrange < I, S, K > && r ) ;
(2) (C++20부터)
namespace std { using ranges :: get ; }
(3) (C++20부터)

구조화된 바인딩 지원을 제공합니다.

1) subrange lvalue(또는 const rvalue)에서 반복자 또는 센티널을 획득합니다. 각각 N == 0 또는 N == 1 일 때.
2) (1) 과 동일하지만, 비상수 subrange rvalue를 취한다는 점이 다릅니다.
3) 오버로드 (1,2) 는 네임스페이스 std 로 임포트되며, 이는 사용을 단순화하고 모든 복사 가능한 반복자를 가진 subrange pair-like 타입으로 만듭니다.

목차

매개변수

r - a subrange

반환값

1,2) 만약 N 0 이면, r. begin ( ) 를 반환합니다. 그렇지 않은 경우 ( N 1 이면), r. end ( ) 를 반환합니다.

예제

#include <array>
#include <iostream>
#include <iterator>
#include <ranges>
int main()
{
    std::array a{1, -2, 3, -4};
    std::ranges::subrange sub_a{std::next(a.begin()), std::prev(a.end())};
    std::cout << *std::ranges::get<0>(sub_a) << ' '   // == *(begin(a) + 1)
              << *std::ranges::get<1>(sub_a) << '\n'; // == *(end(a) - 1)
    *std::get<0>(sub_a) = 42; // OK
//  *std::get<2>(sub_a) = 13; // Error: index can only be 0 or 1
}

출력:

-2 -4

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 3589 C++20 오버로드 ( 1 ) begin_ 를 복사하지만 N 0 일 때 I copyable 를 모델링하지 않을 수 있음 제약 조건 추가

참고 항목

Structured binding (C++17) 지정된 이름들을 초기화자의 부분 객체나 튜플 요소에 바인딩합니다
튜플의 지정된 요소에 접근합니다
(function template)
pair 의 요소에 접근합니다
(function template)
array 의 요소에 접근합니다
(function template)
인덱스나 타입(타입이 고유한 경우)으로 variant의 값을 읽으며, 오류 시 예외를 발생시킵니다
(function template)
std::complex 에서 실수부나 허수부에 대한 참조를 얻습니다
(function template)