std::ranges:: sized_range, std::ranges:: disable_sized_range
|
ヘッダーで定義
<ranges>
|
||
| (1) | ||
|
template
<
class
T
>
concept sized_range
=
ranges::
range
<
T
>
&&
|
(C++20以降)
(C++26まで) |
|
|
template
<
class
T
>
concept sized_range
=
ranges
::
approximately_sized_range
<
T
>
&&
|
(C++26以降) | |
|
template
<
class
>
constexpr bool disable_sized_range = false ; |
(2) | (C++20以降) |
sized_range
コンセプトは、
range
(C++26まで)
approximately_sized_range
(C++26以降)
型の要件を定め、その型が
size
関数を用いて定数時間でサイズを取得できることを指定します。
disable_sized_range
は、
size
関数(メンバー関数または非メンバー関数)を提供するが、実際には
sized_range
をモデルとしない範囲型の使用を可能にするために存在します。ユーザーはcv修飾されていないプログラム定義型に対して
disable_sized_range
の特殊化を定義できます。そのような特殊化は
定数式
で使用可能であり、型が
const
bool
でなければなりません。
目次 |
セマンティック要件
T
が
sized_range
をモデル化するのは、以下の条件が満たされる場合に限る:
- ranges:: size ( t )
-
- 償却定数時間の計算量を持つこと、
- 等価性を保存する 式から観測可能な方法で t の値を変更しないこと、および
- ranges:: distance ( ranges:: begin ( t ) , ranges:: end ( t ) ) と等しいこと、および
-
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() {}
関連項目
|
(C++20)
|
イテレータ型が
random_access_iterator
を満たす範囲を指定する
(コンセプト) |
|
(C++20)
|
イテレータ型が
contiguous_iterator
を満たす範囲を指定する
(コンセプト) |