Namespaces
Variants

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

ja.cppreference.net より
 
 
レンジライブラリ
レンジアダプタ
 
ヘッダ <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をモデル化しないレンジ型の使用を許可するために存在します。ユーザーは、cv修飾されていないプログラム定義型に対してdisable_sized_rangeを特殊化することができます。そのような特殊化は、定数式で使用可能であり、型const boolを持たなければなりません。

セマンティック要件

1) 型 std:: remove_reference_t < T > の左辺値 t が与えられたとき、 T が sized_range をモデル化するのは、以下の条件が満たされる場合に限る:
  • ranges:: iterator_t < T > が forward_iterator をモデル化する場合、 ranges:: size ( t ) は ranges:: begin ( t ) の評価に関係なく well-defined であること(すなわち、シングルパスのサイズ指定範囲は最初の 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 を満たす範囲を指定する
(コンセプト)