std::ranges:: views:: enumerate, std::ranges:: enumerate_view
|
헤더에 정의됨
<ranges>
|
||
|
template
<
ranges::
view
V
>
requires
/*range-with-movable-references*/
<
V
>
|
(1) | (C++23부터) |
|
namespace
views
{
inline
constexpr
/* 지정되지 않음 */
enumerate
=
/* 지정되지 않음 */
;
|
(2) | (C++23부터) |
|
호출 시그니처
|
||
|
template
<
ranges::
viewable_range
R
>
requires
/* 아래 참조 */
|
(C++23부터) | |
|
헬퍼 개념
|
||
|
template
<
class
R
>
concept
/*range-with-movable-references*/
=
|
(3) | ( 설명 전용* ) |
enumerate_view
는
view
를 취하고
tuple
들의 뷰를 생성하는 범위 어댑터입니다.
결과 시퀀스의
i
th
번째 요소(튜플)는 다음을 보유합니다:
-
기본 시퀀스 요소의 0-기반 인덱스인
i와 동일한 값, 그리고 - 기본 요소에 대한 참조.
views::enumerate
는
RangeAdaptorObject
를 나타냅니다. 부분 표현식
e
가 주어졌을 때, 표현식
views
::
enumerate
(
e
)
는
표현식 동등
합니다
enumerate_view
<
views::
all_t
<
decltype
(
(
e
)
)
>>
(
e
)
에 대해, 적절한 부분 표현식
e
가 주어졌을 때.
enumerate_view
는 기본 뷰
V
가 해당 개념들을 모델링할 때
random_access_range
,
bidirectional_range
,
forward_range
,
input_range
,
common_range
, 그리고
sized_range
개념들을 모델링합니다.
목차 |
데이터 멤버
| 멤버 | 설명 |
V
base_
|
기반이 되는
view
에 대한 반복자
( 설명 전용 멤버 객체* ) |
멤버 함수
enumerate_view
를 생성합니다
(public member function) |
|
|
기본(적응된) 뷰의 복사본을 반환합니다
(public member function) |
|
|
시작 부분을 가리키는 반복자를 반환합니다
(public member function) |
|
|
끝 부분을 가리키는 반복자나 센티널을 반환합니다
(public member function) |
|
요소의 개수를 반환합니다. 기본(적응된) 범위가
sized_range
를 만족하는 경우에만 제공됩니다
(public member function) |
|
|
(C++26)
|
결과
approximately_sized_range
의 대략적인 크기를 반환합니다
(public member function) |
std::ranges::view_interface 로부터 상속됨 |
|
파생된 뷰가 비어 있는지 여부를 반환합니다.
sized_range
나
forward_range
를 만족하는 경우에만 제공됩니다
(
std::ranges::view_interface<D>
의 public member function)
|
|
|
(C++23)
|
범위의 시작을 가리키는 상수 반복자를 반환합니다
(
std::ranges::view_interface<D>
의 public member function)
|
|
(C++23)
|
범위의 상수 반복자에 대한 센티널을 반환합니다
(
std::ranges::view_interface<D>
의 public member function)
|
|
파생된 뷰가 비어 있지 않은지 여부를 반환합니다.
ranges::empty
가 적용 가능한 경우에만 제공됩니다
(
std::ranges::view_interface<D>
의 public member function)
|
|
파생된 뷰의 첫 번째 요소를 반환합니다.
forward_range
를 만족하는 경우 제공됩니다
(
std::ranges::view_interface<D>
의 public member function)
|
|
파생된 뷰의 마지막 요소를 반환합니다.
bidirectional_range
와
common_range
를 만족하는 경우에만 제공됩니다
(
std::ranges::view_interface<D>
의 public member function)
|
|
파생된 뷰의
n
번째
요소를 반환합니다.
random_access_range
를 만족하는 경우에만 제공됩니다
(
std::ranges::view_interface<D>
의 public member function)
|
|
추론 가이드
중첩 클래스
|
(C++23)
|
반복자 타입
( 설명 전용 멤버 클래스 템플릿* ) |
|
(C++23)
|
센티넬 타입
( 설명 전용 멤버 클래스 템플릿* ) |
헬퍼 템플릿
|
template
<
class
View
>
constexpr
bool
enable_borrowed_range
<
ranges
::
enumerate_view
<
View
>>
=
|
(C++23부터) | |
이
ranges::enable_borrowed_range
특수화는 기본 뷰가 이를 만족할 때
enumerate_view
가
borrowed_range
를 만족하도록 합니다.
참고 사항
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_ranges_enumerate
|
202302L
|
(C++23) |
std::ranges::enumerate_view
|
예제
#include <initializer_list> #include <iostream> #include <map> #include <ranges> #include <vector> int main() { constexpr static auto v = {'A', 'B', 'C', 'D'}; for (auto const [index, letter] : std::views::enumerate(v)) std::cout << '(' << index << ':' << letter << ") "; std::cout << '\n'; #if __cpp_lib_ranges_to_container // 각 요소의 위치를 키로 사용하여 맵 생성 auto m = v | std::views::enumerate | std::ranges::to<std::map>(); for (auto const [key, value] : m) std::cout << '[' << key << "]:" << value << ' '; std::cout << '\n'; #endif std::vector<int> numbers{1, 3, 5, 7}; // const가 있어도 num은 변경 가능하며, 참조에 const가 전파되지 않음 // const로 만들려면 `std::views::enumerate(numbers) | std::views::as_const` // 또는 `std::views::enumerate(std::as_const(numbers))` 사용 for (auto const [index, num] : std::views::enumerate(numbers)) { ++num; // 타입은 int& std::cout << numbers[index] << ' '; } std::cout << '\n'; }
가능한 출력:
(0:A) (1:B) (2:C) (3:D) [0]:A [1]:B [2]:C [3]:D 2 4 6 8
참조문헌
- C++23 표준 (ISO/IEC 14882:2024):
-
- 26.7.23 열거 뷰 [range.enumerate]
참고 항목
|
(C++20)
|
초기값을 반복적으로 증가시켜 생성된 시퀀스로 구성된
view
(클래스 템플릿) (커스터마이제이션 포인트 객체) |
|
(C++23)
|
적응된 뷰들의 해당 요소들에 대한 참조의 튜플로 구성된
view
(클래스 템플릿) (커스터마이제이션 포인트 객체) |
tuple-like
값들로 구성된
view
와 숫자 N을 취하여 각 튜플의 N
th
요소들의
view
를 생성함
(클래스 템플릿) (레인지 어댑터 객체) |