std::ranges:: views:: elements, std::ranges:: elements_view
|
헤더 파일에 정의됨
<ranges>
|
||
|
template
<
ranges::
input_range
V,
std::
size_t
N
>
requires
ranges::
view
<
V
>
&&
|
(1) | (C++20부터) |
|
namespace
views
{
template
<
std::
size_t
N
>
|
(2) | (C++20부터) |
|
호출 시그니처
|
||
|
template
<
ranges::
viewable_range
R
>
requires
/* 아래 참조 */
|
(C++20부터) | |
|
헬퍼 개념
|
||
| (3) | ||
|
template
<
class
T,
std::
size_t
N
>
concept
/*has-tuple-element*/
=
|
(C++23 이전)
( 설명 전용* ) |
|
|
template
<
class
T,
std::
size_t
N
>
concept
/*has-tuple-element*/
=
|
(C++23 이후)
( 설명 전용* ) |
|
|
template
<
class
T,
std::
size_t
N
>
concept returnable
-
element
=
|
(4) | ( 설명 전용* ) |
views::elements
의 모든 특수화는
RangeAdaptorObject
입니다. 표현식
views
::
elements
<
M
>
(
e
)
는
표현식 동등
합니다
elements_view
<
views::
all_t
<
decltype
(
(
e
)
)
>
, M
>
{
e
}
에 대해, 적절한 부분표현식
e
와 상수 표현식
M
이 주어질 때.
elements_view
는 기본 뷰
V
가 해당 개념들을 모델링할 때
random_access_range
,
bidirectional_range
,
forward_range
,
input_range
,
common_range
, 그리고
sized_range
개념들을 모델링합니다.
목차 |
데이터 멤버
| 멤버 | 설명 |
V
base_
|
기반 뷰
( 설명 전용 멤버 객체* ) |
멤버 함수
elements_view
를 생성합니다
(public 멤버 함수) |
|
|
기본(적응된) 뷰의 복사본을 반환합니다
(public 멤버 함수) |
|
|
시작 부분에 대한 반복자를 반환합니다
(public 멤버 함수) |
|
|
끝 부분에 대한 반복자나 센티널을 반환합니다
(public 멤버 함수) |
|
기본(적응된) 범위가
sized_range
를 만족하는 경우에만 요소의 개수를 반환합니다
(public 멤버 함수) |
|
|
(C++26)
|
결과
approximately_sized_range
의 대략적인 크기를 반환합니다
(public 멤버 함수) |
std::ranges::view_interface 에서 상속됨 |
|
파생된 뷰가
sized_range
또는
forward_range
를 만족하는 경우에만 해당 뷰가 비어 있는지 여부를 반환합니다
(
std::ranges::view_interface<D>
의 public 멤버 함수)
|
|
|
(C++23)
|
범위의 시작 부분에 대한 상수 반복자를 반환합니다
(
std::ranges::view_interface<D>
의 public 멤버 함수)
|
|
(C++23)
|
범위의 상수 반복자에 대한 센티널을 반환합니다
(
std::ranges::view_interface<D>
의 public 멤버 함수)
|
|
ranges::empty
가 적용 가능한 경우에만 파생된 뷰가 비어 있지 않은지 여부를 반환합니다
(
std::ranges::view_interface<D>
의 public 멤버 함수)
|
|
파생된 뷰가
forward_range
를 만족하는 경우 첫 번째 요소를 반환합니다
(
std::ranges::view_interface<D>
의 public 멤버 함수)
|
|
파생된 뷰가
bidirectional_range
와
common_range
를 만족하는 경우에만 마지막 요소를 반환합니다
(
std::ranges::view_interface<D>
의 public 멤버 함수)
|
|
파생된 뷰가
random_access_range
를 만족하는 경우에만
n
번째 요소를 반환합니다
(
std::ranges::view_interface<D>
의 public 멤버 함수)
|
|
중첩 클래스
|
반복자 타입
( 설명 전용 멤버 클래스 템플릿* ) |
|
|
센티넬 타입
( 설명 전용 멤버 클래스 템플릿* ) |
헬퍼 템플릿
|
template
<
class
T,
std::
size_t
N
>
constexpr
bool
enable_borrowed_range
<
std
::
ranges
::
elements_view
<
T, N
>>
=
|
(C++20 이후) | |
ranges::enable_borrowed_range
의 이 특수화는 기본 뷰가 이를 만족할 때
elements_view
가
borrowed_range
를 만족하도록 합니다.
예제
#include <iostream> #include <ranges> #include <string> #include <tuple> #include <vector> int main() { const std::vector<std::tuple<int, char, std::string>> vt { {1, 'A', "α"}, {2, 'B', "β"}, {3, 'C', "γ"}, {4, 'D', "δ"}, {5, 'E', "ε"}, }; for (int const e : std::views::elements<0>(vt)) std::cout << e << ' '; std::cout << '\n'; for (char const e : vt | std::views::elements<1>) std::cout << e << ' '; std::cout << '\n'; for (std::string const& e : std::views::elements<2>(vt)) std::cout << e << ' '; std::cout << '\n'; }
출력:
1 2 3 4 5 A B C D E α β γ δ ε
결함 보고서
다음 동작 변경 결함 보고서는 이전에 게시된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 3494 | C++20 |
elements_view
는 절대
borrowed_range
가 아니었음
|
기본 뷰가
borrowed_range
인 경우
해당 뷰도
borrowed_range
가 됨
|
| LWG 3502 | C++20 |
elements_view
에서 댕글링 참조를 얻을 수 있었음
|
해당 사용법이 금지됨 |
참고 항목
|
(C++20)
|
pair-like 값들로 구성된
view
를 취하여 각 pair의 첫 번째 요소들로 구성된
view
를 생성함
(클래스 템플릿) (range adaptor 객체) |
pair-like 값들로 구성된
view
를 취하여 각 pair의 두 번째 요소들로 구성된
view
를 생성함
(클래스 템플릿) (range adaptor 객체) |
|
|
(C++23)
|
적응된 view들의 해당 요소들에 대한 참조들의 튜플로 구성된
view
(클래스 템플릿) (customization point 객체) |
적응된 view들의 해당 요소들에 변환 함수를 적용한 결과들로 구성된
view
(클래스 템플릿) (customization point 객체) |
|
|
valarray의 BLAS-like slice: 시작 인덱스, 길이, stride
(클래스) |