公有成员函数 (public member function)
<random>
(1) | void seed (result_type val = default_seed); |
---|
(2) | template <class Sseq>void seed (Sseq& q); |
---|
播种引擎
重新初始化内部状态值
- 对于版本(1),状态值设置为val % modulus(除非 val 和increment都是modulus的倍数,在这种情况下,状态值设置为default_seed).
- 对于版本(2),该函数在一个包含四个元素(外加一个额外元素,用于表示 m 所需的位数超过 32)的数组上调用 `q.generate`。然后它丢弃获得的前三个元素,并使用剩余的元素构造一个类型为result_type的值,该值用于初始化引擎,就如同调用版本(1) 时使用它一样。
参数
- val
- 一个种子值。
result_type是一个成员类型,定义为第一个类模板参数的别名 (UIntType).
default_seed是一个成员常量,定义为1u.
- q
- 一个种子序列对象,例如seed_seq类型的对象。
Sseq应为具有generate成员函数的种子序列类。
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
// linear_congruential_engine::seed example
#include <iostream>
#include <chrono>
#include <random>
int main ()
{
typedef std::chrono::high_resolution_clock myclock;
myclock::time_point beginning = myclock::now();
// obtain a seed from a user string:
std::string str;
std::cout << "Please, enter a seed: ";
std::getline(std::cin,str);
std::seed_seq seed1 (str.begin(),str.end());
// obtain a seed from the timer
myclock::duration d = myclock::now() - beginning;
unsigned seed2 = d.count();
std::minstd_rand0 generator (seed1); // minstd_rand0 is a standard linear_congruential_engine
std::cout << "Your seed produced: " << generator() << std::endl;
generator.seed (seed2);
std::cout << "A time seed produced: " << generator() << std::endl;
return 0;
}
|
可能的输出
Please, enter a seed: Lehmer
Your seed produced: 606418532
A time seed produced: 1671690313
|