公共成员函数
<random>

std::mersenne_twister_engine::discard

void discard (unsigned long long z);
推进内部状态
将内部状态推进z个刻度,就像调用了operator()z次一样,但在此过程中不生成任何数字。

对状态序列的影响与过渡算法应用与在后续元素上推进的刻度一样多次相同。对象使用的过渡算法会在选定的元素上产生扭曲,就好像这是x[i]在以下代码段中

1
2
3
UIntType Mask = (1u<<w)-1, UMask= (Mask << r) & Mask, LMask = (~UMask) & Mask,
Y = (x[i]&UMask)|(x[(i+1)%n]&LMask);  // upper bits of x[i] and lower of x[i+1]
x[i]=x[(i+m)%n]^(Y>>1)^((Y&1)*a);     // mersenne twister linear transformation 
每个值都是它们对应的类模板参数。

注意:尚未完全测试,请报告任何不准确之处。

参数

z
等效推进的数量。

返回值



示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// mersenne_twister_engine::discard
#include <iostream>
#include <chrono>
#include <random>

int main ()
{
  // obtain a seed from the system clock:
  unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();

  std::mt19937 generator (seed);  // mt19937 is a standard mersenne_twister_engine

  std::cout << "Random value: " << generator() << std::endl;

  generator.discard(generator.state_size);  // twist the entire state sequence

  std::cout << "Random value: " << generator() << std::endl;

  return 0;
}

可能的输出
Random value: 2025681734
Random value: 649145785


复杂度

z呈线性关系。

另见