std::mersenne_twister_engine<UIntType,w,n,m,r,a,u,d,s,b,t,c,l,f>::mersenne_twister_engine
来自cppreference.com
                    
                                        
                    < cpp | numeric | random | mersenne twister engine
                    
                                                            
                    
|   mersenne_twister_engine() : mersenne_twister_engine(default_seed) {}  | 
(1) | (C++11 起) | 
|   explicit mersenne_twister_engine( result_type value );  | 
(2) | (C++11 起) | 
|   template< class Sseq >  explicit mersenne_twister_engine( Sseq& s );  | 
(3) | (C++11 起) | 
|   mersenne_twister_engine( const mersenne_twister_engine& );  | 
(4) |  (C++11 起)  (隐式声明)  | 
构造伪随机数引擎。
1) 默认构造函数。以 
default_seed 播种引擎。2) 构造引擎并初始化状态( 
i )如下:用 value mod 2w
初始化 X
0 ,并递推初始化其余内容,对于 i=1-n,...,-1 ,初始化每个 X
i 为 [f·(X
i-1xor(X
i-1rshift(w-2)))+i mod n] mod 2w
。
result_type 类型的 n 个值 Xi )如下:用 value mod 2w
初始化 X
0 ,并递推初始化其余内容,对于 i=1-n,...,-1 ,初始化每个 X
i 为 [f·(X
i-1xor(X
i-1rshift(w-2)))+i mod n] mod 2w
。
3) 构造引擎并通过调用 s.generate(a, a+n*k) 初始化状态,其中 a 是长为 n*k 的数组,而 k 为 ceil(w/32) ,然后,对于每个 i=-n,...,-1 ,递推地设置引擎状态的元素 X
i 为 (Σk-1
j=0a
k(i+n)+j}·232j
) mod 2w
,最后若 X
0 的最高 w-r 位为零,且若所有其他 X
i 均为零,则以 2w-1
替换 X
0 。
i 为 (Σk-1
j=0a
k(i+n)+j}·232j
) mod 2w
,最后若 X
0 的最高 w-r 位为零,且若所有其他 X
i 均为零,则以 2w-1
替换 X
0 。
注意:初始化要求基于梅森缠绕器的 2002 版本, mt19937ar.c
仅若 Sseq 符合重载种子序列 (SeedSequence) , (3) 才参与重载决议。尤其是若 Sseq 可转换为 result_type ,则从候选函数集中排除该重载。
参数
| value | - | 用于内部状态初始化的种子值 | 
| s | - | 用于内部状态初始化的种子序列 | 
复杂度
与 n (状态大小)成线性
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 | 
|---|---|---|---|
| P0935R0 | C++11 | 默认构造函数曾为 explicit | 使之为隐式 | 
参阅
|    (C++11)  | 
  设置引擎的当前状态  (公开成员函数)  |