std::sized_sentinel_for

std::sized_sentinel_for (크기 있는 센티널 컨셉)

반복자 타입 I의 객체와 센티널 타입 S의 객체를 빼서 그 사이의 거리를 상수 시간에 계산할 수 있음을 명세하는 컨셉이에요. C++20부터 있어요.

출처: cppreference

본문

<iterator> 헤더에 정의돼 있어요.

// (1)
template< class S, class I >
    concept sized_sentinel_for =
        std::sentinel_for<S, I> &&
        !std::disable_sized_sentinel_for<std::remove_cv_t<S>,
                                         std::remove_cv_t<I>> &&
        requires(const I& i, const S& s) {
            { s - i } -> std::same_as<std::iter_difference_t<I>>;
            { i - s } -> std::same_as<std::iter_difference_t<I>>;
        };

// (2)
template< class S, class I >
    inline constexpr bool disable_sized_sentinel_for = false;
    1. sized_sentinel_for 컨셉은 반복자 타입 I의 객체와 센티널 타입 S의 객체를 빼서 그 사이의 거리를 상수 시간에 계산할 수 있음을 명세해요.
    1. disable_sized_sentinel_for 변수 템플릿은, 뺄 수는 있지만 실제로 sized_sentinel_for를 모델링하지 않는 반복자·센티널이 이 컨셉을 만족하는 것을 막는 데 쓸 수 있어요. 프로그램 정의 타입에 대해 특수화할 수 있어요.

의미 요구사항

[I, S)가 범위를 나타내는 I 타입 반복자 i와 S 타입 센티널 s에 대해, s - iranges::distance(i, s)와 같고, i가 s에서 도달 가능하면 상수 시간이 보장돼요.

더 알아보기 (Learn more)

cppreference