除了播种你的随机数发生器,我建议你尽量避免rand()
,如果可能的话。这通常不是一个很好的计划,常见的用法(如rand() % size
)会产生偏差的结果。如果可用,更好的选择是标准C++ <random>
库。
的<random>
超过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';
哎呀抱歉..我真的错过了。顺便说一句,我们如何设置限制..我只需要它在1和2000之间 – srinath 2013-02-26 17:51:17
@srinath:http://stackoverflow.com/a/2999130/179910 – 2013-02-26 17:52:46
@srinath:http://stackoverflow.com/a/686373/241536 – 2013-02-26 17:53:43