std::ranges:: generate_random
std::ranges
| Non-modifying sequence operations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Modifying sequence operations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Partitioning operations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Sorting operations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Binary search operations (on sorted ranges) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Set operations (on sorted ranges) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Heap operations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Minimum/maximum operations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Permutation operations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Fold operations | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Operations on uninitialized storage | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Return types | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
定義済みヘッダー
<random>
|
||
|
呼び出しシグネチャ
|
||
|
template
<
class
R,
class
G
>
requires
ranges::
output_range
<
R,
std::
invoke_result_t
<
G
&
>>
&&
|
(1) | (C++26以降) |
|
template
<
class
G,
std::
output_iterator
<
std::
invoke_result_t
<
G
&
>>
O,
std::
sentinel_for
<
O
>
S
>
|
(2) | (C++26以降) |
|
template
<
class
R,
class
G,
class
D
>
requires
ranges::
output_range
<
R,
std::
invoke_result_t
<
D
&
, G
&
>>
&&
|
(3) | (C++26以降) |
|
template
<
class
G,
class
D,
std::
output_iterator
<
std::
invoke_result_t
<
D
&
, G
&
>>
O,
std::
sentinel_for
<
O
>
S
>
|
(4) | (C++26以降) |
乱数生成器または分布の
generate_random
メンバー関数を使用して乱数を生成しようと試みます。これはより効率的であると期待されます。
generate_random
メンバー関数が利用できない場合は、要素ごとの生成にフォールバックします。
フォールバック操作として、 ranges:: generate ( std:: forward < R > ( r ) , std:: ref ( g ) ) または ranges:: generate ( std:: forward < R > ( r ) , [ & d, & g ] { return std:: invoke ( d, g ) ; } ) を呼び出すものとする。それぞれ (1) または (3) の場合。
R
が
sized_range
をモデル化する場合、
r
を
ranges::
size
(
r
)
個の
I
の値で埋める。これは、未規定の回数の呼び出し
g
(
)
または
g.
generate_random
(
s
)
を実行することによって行われる。ただし、そのような式が値
N
と型
std::
span
<
I, N
>
のオブジェクト
s
に対して well-formed である場合に限る。
R
が
sized_range
をモデル化する場合、
r
を
ranges::
size
(
r
)
個の型
I
の値で埋める。これは、未規定の回数の呼び出し
std::
invoke
(
d, g
)
または
d.
generate_random
(
s, g
)
を実行することによって行われる。ただし、そのような式が値
N
と型
std::
span
<
I, N
>
のオブジェクト
s
に対して well-formed である場合に限る。
(1) または (3) の効果が対応する代替操作の効果と等価でない場合、動作は未定義です。
N
の値は呼び出しごとに異なる可能性があります。実装はより短い範囲に対してより小さい値を選択することがあります。
このページで説明されている関数ライクなエンティティは、 アルゴリズム関数オブジェクト (非公式には niebloids として知られる) です。つまり:
- 明示的なテンプレート引数リストは、いずれかを呼び出す際に指定することはできません。
- いずれも 実引数依存の名前探索 では可視になりません。
- いずれかが関数呼び出し演算子の左側の名前として 通常の非修飾名前探索 によって見つかった場合、 実引数依存の名前探索 は抑制されます。
目次 |
パラメータ
| first, last | - | ランダムな数値が書き込まれる要素の 範囲 を定義するイテレータ-センチネルペア |
| r | - |
ランダムな数値が書き込まれる
range
|
| g | - | 一様ランダムビット生成器 |
| d | - | 乱数分布オブジェクト |
注記
std::ranges::generate_random
の標準化時点では、標準ライブラリには
generate_random
メンバ関数を提供する乱数生成器または分布は存在しません。
std::ranges::generate_random
は、基盤となるベクトル化APIをラップするユーザー定義乱数ジェネレータと共に使用する場合、より効率的になる可能性があります。
| 機能テスト マクロ | 値 | 標準 | 機能 |
|---|---|---|---|
__cpp_lib_ranges_generate_random
|
202403L
|
(C++26) |
std::ranges::generate_random
|
例
#include <algorithm> #include <iomanip> #include <iostream> #include <random> int main() { std::default_random_engine eng; std::default_random_engine::result_type rs[16]{}; std::ranges::generate_random(rs, eng); std::cout << std::left; for (int i{}; auto n : rs) std::cout << std::setw(11) << n << (++i % 4 ? ' ' : '\n'); }
出力例:
16807 282475249 1622650073 984943658 1144108930 470211272 101027544 1457850878 1458777923 2007237709 823564440 1115438165 1784484492 74243042 114807987 1137522503
関連項目
|
(C++20)
|
関数の結果を範囲に保存する
(アルゴリズム関数オブジェクト) |
|
(C++20)
|
型が一様ランダムビット生成器として適格であることを指定する
(コンセプト) |