Namespaces
Variants

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

cppreference.net에서 가져옴
 
 
범위 라이브러리
범위 어댑터
 
 
헤더 <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 또는 N == 0인 경우 N == 1 lvalue (또는 const rvalue)에서 반복자 또는 센티널을 가져옵니다.
2)비-const rvalue를 취한다는 점을 제외하면 (1)subrange과 동일합니다.
3)오버로드 (1,2)는 std 네임스페이스로 임포트되어, 사용을 단순화하고 복사 가능한 반복자를 가진 모든 subrange을 pair-유사 타입으로 만듭니다.

매개변수

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)