std::ranges::generate_random
定義於標頭檔案 <random> |
||
呼叫簽名 (Call signature) |
||
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)。
如果 (1) 或 (3) 的效果與相應的回退操作的效果不等價,則行為未定義。
N 的值在不同調用之間可能不同。對於較短的範圍,實現可以選擇較小的值。
本頁描述的類函式實體是 演算法函式物件(非正式地稱為 niebloids),即
目錄 |
[編輯] 引數
first, last | - | 定義要寫入隨機數的元素的範圍的迭代器-哨兵對 |
r | - | 要寫入隨機數的`範圍` |
g | - | 統一隨機位生成器 |
d | - | 隨機數分佈物件 |
[編輯] 注意
在 `std::ranges::generate_random` 標準化時,標準庫中沒有提供 `generate_random` 成員函式的隨機數生成器或分佈。
當與包裝底層向量化 API 的使用者定義隨機數生成器一起使用時,`std::ranges::generate_random` 可以更高效。
特性測試宏 | 值 | 標準 | 特性 |
---|---|---|---|
__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) |
指定型別是否符合統一隨機位生成器 (概念) |