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

最佳答案

好吧,评论是正确的,您需要一种改组策略。看一下C++ 11中的以下示例:

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

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

关于c++ - 我应该选择哪个随机生成器在C++中的序列中没有重复的数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35568310/

10-12 04:41