梳理一下C++随机数引擎的相关知识。核心知识点是:引擎会返回相同的随机数序列。(可以理解为标准库random中的所有引擎对象无论何时都返回一个同样的、固定的、无限多元素的伪随机数序列)
Q: 为什么我们应该把引擎声明为static的?
A: 可以把每个引擎想象成在一个已生成好的随机序列上的迭代器,每次使用分布类型时就会推进这个迭代器。因此,这也就解释了为什么badRand和goodRand的区别:
//bad_rand中没有将随机引擎和分布对象作为static静态成员 因此每次调用返回的数值序列都相同
unsigned bad_rand() {
default_random_engine e;
uniform_int_distribution<unsigned> u(0, 9);
//cout << u(e) << ends;
return u(e);
}
//每次调用返回不同数值序列
unsigned good_rand() {
static default_random_engine e;
static uniform_int_distribution<unsigned> u(0, 9);
//cout << u(e);
return u(e);
}
//test:
int main() {
for (int i = 0; i < 10;++i) {
cout << bad_rand() << ends;
}
cout << endl;
for (