std::ranges:: views:: iota, std::ranges:: iota_view
|
헤더 파일에 정의됨
<ranges>
|
||
|
template
<
std::
weakly_incrementable
W,
std::
semiregular
Bound
=
std::
unreachable_sentinel_t
>
|
(1) | (C++20부터) |
|
namespace
views
{
inline
constexpr
/* 지정되지 않음 */
iota
=
/* 지정되지 않음 */
;
|
(2) | (C++20부터) |
|
호출 시그니처
|
||
|
template
<
class
W
>
requires
/* 아래 참조 */
|
(C++20부터) | |
|
template
<
class
W,
class
Bound
>
requires
/* 아래 참조 */
|
(C++20부터) | |
목차 |
커스터마이제이션 포인트 객체
views::iota
라는 이름은
커스터마이제이션 포인트 객체
를 나타내며,
이는
함수 객체
인
const
리터럴
semiregular
클래스 타입입니다. 자세한 내용은
CustomizationPointObject
를 참조하십시오.
데이터 멤버
| 멤버 | 정의 |
W
value_
|
시작 값
( 설명 전용 멤버 객체* ) |
Bound
bound_
|
센티널 값, 도달 불가능할 수 있음
( 설명 전용 멤버 객체* ) |
멤버 함수
iota_view
를 생성함
(public 멤버 함수) |
|
iota_view
의 시작 반복자를 얻음
(public 멤버 함수) |
|
iota_view
의 끝을 나타내는 sentinel을 얻음
(public 멤버 함수) |
|
iota_view
가 비어 있는지 테스트함 (즉, 반복자와 sentinel이 동일한지 비교)
(public 멤버 함수) |
|
|
(optional)
|
iota_view
의 크기를 얻음 (경계가 있을 때만 제공됨)
(public 멤버 함수) |
std::ranges::view_interface 로부터 상속됨 |
|
|
(C++23)
|
범위의 시작을 가리키는 상수 반복자를 반환함
(
std::ranges::view_interface<D>
의 public 멤버 함수)
|
|
(C++23)
|
범위의 상수 반복자에 대한 sentinel을 반환함
(
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 멤버 함수)
|
|
파생된 뷰의
n
번째
요소를 반환함,
random_access_range
를 만족할 때만 제공됨
(
std::ranges::view_interface<D>
의 public 멤버 함수)
|
|
추론 가이드
중첩 클래스
|
반복자 타입
( 설명 전용 멤버 클래스* ) |
|
iota_view
가 범위 제한되어 있고
Bound
와
W
가 동일한 타입이 아닐 때 사용되는 센티넬 타입
( 설명 전용 멤버 클래스* ) |
헬퍼 템플릿
|
template
<
std::
weakly_incrementable
W,
std::
semiregular
Bound
>
constexpr bool ranges:: enable_borrowed_range < ranges :: iota_view < W, Bound >> = true ; |
(C++20 이후) | |
ranges::
enable_borrowed_range
의 이 특수화는
iota_view
가
borrowed_range
를 만족하도록 합니다.
예제
#include <algorithm> #include <iostream> #include <ranges> struct Bound { int bound; bool operator==(int x) const { return x == bound; } }; int main() { for (int i : std::ranges::iota_view{1, 10}) std::cout << i << ' '; std::cout << '\n'; for (int i : std::views::iota(1, 10)) std::cout << i << ' '; std::cout << '\n'; for (int i : std::views::iota(1, Bound{10})) std::cout << i << ' '; std::cout << '\n'; for (int i : std::views::iota(1) | std::views::take(9)) std::cout << i << ' '; std::cout << '\n'; std::ranges::for_each(std::views::iota(1, 10), [](int i){ std::cout << i << ' '; }); std::cout << '\n'; }
출력:
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
결함 보고서
다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 4096 | C++20 |
views::iota
가
iota_view
를 그대로 복사할 수 있었음
|
금지됨 |
| P2325R3 | C++20 |
iota_view
가
W
가
semiregular
임을 요구함
view
가
default_initializable
을 요구하기 때문
|
W
가
copyable
임만 요구
|
참고 항목
|
(C++11)
|
시작 값의 연속적인 증가로 범위를 채웁니다
(함수 템플릿) |
|
(C++23)
|
시작 값의 연속적인 증가로 범위를 채웁니다
(알고리즘 함수 객체) |
동일한 값을 반복적으로 생성하여 생성된 시퀀스로 구성된
view
(클래스 템플릿) (커스터마이제이션 포인트 객체) |
|
적응된 시퀀스의 각 요소를 요소의 위치와 값 모두를 포함하는 튜플로 매핑하는
view
(클래스 템플릿) (레인지 어댑터 객체) |