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