Namespaces
Variants

std::ranges::views:: counted

From cppreference.net
Ranges library
Range adaptors
헤더 파일에 정의됨 <ranges>
inline constexpr /*unspecified*/ counted = /*unspecified*/ ;
(C++20 이후)
호출 시그니처
template < class Iterator, class DifferenceType >

requires /* see below */

constexpr /*span-or-subrange*/ counted ( Iterator && it, DifferenceType && count ) ;
(C++20 이후)

카운트된 뷰는 일부 반복자 i 와 음수가 아닌 정수 n 에 대한 카운트된 범위 [ i , n ) 의 요소들에 대한 view 를 제공합니다.

카운트된 범위 [ i , n ) i 가 가리키는 요소로 시작하여 n 번의 ++ i 적용 결과가 가리키는 요소(존재하는 경우)를 포함하지 않는 n 개의 요소들입니다.

만약 n == 0 이면, 카운트된 범위는 유효하며 비어 있습니다. 그렇지 않으면, 카운트된 범위는 n 이 양수이고, i 가 역참조 가능하며, [ ++ i , -- n ) 가 유효한 카운트된 범위일 때에만 유효합니다.

공식적으로, it count 가 표현식이고, T std:: decay_t < decltype ( ( it ) ) > 이며, D std:: iter_difference_t < T > 라면,

만약 T input_or_output_iterator 를 만족하고 decltype ( ( count ) ) std:: convertible_to < D > 를 만족하면,
그렇지 않으면, views:: counted ( it, count ) 는 잘못된 형식입니다.

목차

커스터마이제이션 포인트 객체

views::counted 이름은 커스터마이제이션 포인트 객체 를 나타내며, 이는 함수 객체 의 리터럴 리터럴 semiregular 클래스 타입의 상수입니다. 자세한 내용은 CustomizationPointObject 를 참조하십시오.

참고 사항

views::counted 는 범위가 count 개의 요소를 모두 제공할 수 있을 만큼 충분히 긴지 확인하지 않습니다: 해당 확인이 필요한 경우 views:: take 를 사용하십시오.

예제

#include <iostream>
#include <ranges>
int main()
{
    const int a[]{1, 2, 3, 4, 5, 6, 7};
    for (int i : std::views::counted(a, 3))
        std::cout << i << ' ';
    std::cout << '\n';
    const auto il = {1, 2, 3, 4, 5};
    for (int i : std::views::counted(il.begin() + 1, 3))
        std::cout << i << ' ';
    std::cout << '\n';
}

출력:

1 2 3
2 3 4

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
P2393R1 C++20 정수 클래스 타입에서 std:: size_t 로의 암시적 변환이 유효하지 않을 수 있음 명시적으로 변경됨

참고 항목

다른 view 의 첫 N개 요소로 구성된 view
(클래스 템플릿) (range adaptor object)
iterator-sentinel 쌍을 view 로 결합
(클래스 템플릿)
범위의 끝까지 거리를 추적하는 iterator adaptor
(클래스 템플릿)
특정 조건을 만족하는 요소의 개수를 반환
(알고리즘 함수 객체)