我应该选择哪个随机生成器,因为c ++

时间:2016-02-23 03:32:34

标签: c++ c++11 random

我正在使用c ++ 11进行编程。如果可能的话,该程序在mac,linux和windows上更好地兼容。如果没有,该程序至少应该在linux上运行良好,我不会考虑mac和windows平台。我想从[a,b]返回随机数序列。计数可能等于b-a或小于b-a。序列中的数字应彼此不同,例如9 8 6 1 3 0 7 [0,10]。其中不应该有两个8或3个重复的数字。我应该使用哪种随机发生器? uniform_int_distribution?还是uniform_real_distribution? uniform_real_distribution比uniform_int_distribution更好吗?或者还有其他可能的方法吗?我是否必须创建自己的随机数列表,如Unique (non-repeating) random numbers in O(1)。谢谢你的时间。

1 个答案:

答案 0 :(得分:3)

嗯,评论是对的,你需要一个改组策略。看一下C ++ 11中的以下示例:

std::vector<int> myNums(b-a);
std::iota(myNums.begin(), myNums.end(), a);
std::random_shuffle(myNums.begin(), myNums.end());

当然,您可以实现自己的方法,但C ++ STL默认实现了一些非常酷的算法。