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;
-
sized_sentinel_for컨셉은 반복자 타입I의 객체와 센티널 타입S의 객체를 빼서 그 사이의 거리를 상수 시간에 계산할 수 있음을 명세해요.
-
disable_sized_sentinel_for변수 템플릿은, 뺄 수는 있지만 실제로sized_sentinel_for를 모델링하지 않는 반복자·센티널이 이 컨셉을 만족하는 것을 막는 데 쓸 수 있어요. 프로그램 정의 타입에 대해 특수화할 수 있어요.
의미 요구사항
[I, S)가 범위를 나타내는 I 타입 반복자 i와 S 타입 센티널 s에 대해, s - i는 ranges::distance(i, s)와 같고, i가 s에서 도달 가능하면 상수 시간이 보장돼요.