除了播种随机数生成器之外rand()
,如果可能的话,我建议您完全避免。它通常不是一个很好的 pRNG,并且常见的用法(例如rand() % size
)会产生有偏差的结果。如果可用,一个更好的选择是标准 C++<random>
库。
<random>
over的一些好处rand()
:
- 几种具有明确特性的发动机,以满足不同的需求。
- 预定义的发行版,比自己制作更容易正确使用。
- 线程程序中明确指定的行为。
例子:
#include <random>
#include <iostream>
#include <functional>
int main() {
std::random_device r;
std::seed_seq seed{r(), r(), r(), r(), r(), r(), r(), r()};
std::mt19937 e(seed);
int size = 10;
std::uniform_int_distribution d(1,size);
std::cout << d(e) << '\n';
}
如果更适合您的使用,您还可以将所有内容绑定到单个函数对象中。
#include <functional>
std::random_device r;
std::seed_seq seed{r(), r(), r(), r(), r(), r(), r(), r()};
auto rand = std::bind(std::uniform_int_distribution<>(1,size),
std::mt19937(seed));
std::cout << rand() << '\n';