Namespaces
Variants

std::ranges::sized_range, std::ranges::disable_sized_range

cppreference.net에서
 
 
Ranges 라이브러리
Range 어댑터
 
헤더 <ranges>
template< class T >
concept sized_range = ranges::range<T> &&
    requires(T& t) {
        ranges::size(t);
    };
에 정의됨 (1) (C++20부터)
(C++26까지)
template< class T >
concept sized_range = ranges::approximately_sized_range<T> &&
    requires(T& t) {
        ranges::size(t);
    };
(C++26부터)
template< class >
constexpr bool disable_sized_range = false;
(2) (C++20부터)
1) 컨셉 sized_range은 range(C++26까지)approximately_sized_range(C++26부터) 타입이 size 함수를 통해 상수 시간에 그 크기를 알 수 있는 요구 사항을 지정합니다.
2) disable_sized_range는 size 함수(멤버 또는 비멤버로 제공)를 제공하지만 실제로는 sized_range을 모델링하지 않는 range 타입의 사용을 허용하기 위해 존재합니다. 사용자는 cv 한정되지 않은 프로그램 정의 타입에 대해 disable_sized_range을 특수화할 수 있습니다. 이러한 특수화는 상수 표현식에서 사용 가능해야 하며, 타입이 const bool이어야 합니다.

의미론적 요구사항

1) 타입 std:: remove_reference_t < T > 의 lvalue t 가 주어졌을 때, T 가 sized_range 를 모델링하려면 다음 조건을 만족해야 합니다:
  • 만약 ranges:: iterator_t < T > 가 forward_iterator 를 모델링한다면, ranges:: size ( t ) 는 ranges:: begin ( t ) 의 평가와 관계없이 잘 정의되어야 합니다 (즉, 단일 패스 크기 범위는 begin의 첫 번째 호출 전에만 size 호출을 지원할 수 있지만, 순방향 범위는 항상 size를 지원해야 합니다).

참고 사항

disable_sized_range 는 반복자와 센티넬이 sized_sentinel_for 를 만족하는 범위의 사용을 옵트아웃하는 데 사용할 수 없습니다; std::disable_sized_sentinel_for 를 대신 사용해야 합니다.

disable_sized_range 는 배열 타입이나 참조 타입에 대해 특수화될 수 없습니다.

기능 테스트 매크로 값 표준 기능
__cpp_lib_ranges_reserve_hint 202502L (C++26) ranges::approximately_sized_range 및 ranges::reserve_hint

예제

#include <forward_list>
#include <list>
#include <ranges>
static_assert
(
    std::ranges::sized_range<std::list<int>> and
    not std::ranges::sized_range<std::forward_list<int>>
);
int main() {}

참고 항목

반복자 타입이 random_access_iterator 를 만족하는 범위를 지정함
(컨셉)
반복자 타입이 contiguous_iterator 를 만족하는 범위를 지정함
(컨셉)