除了播種你的隨機數發生器,我建議你儘量避免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