c++ - 我应该为 C++ 中的序列中的无重复数字选择哪个随机生成器

标签 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 或三个 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/

相关文章:

c++ - 根据字体句柄获取字体文件名 (HFONT)

c++ - 基本问题,错误: substr out of range

C++多线程嵌套for循环

c++ - 在 C++ 中打开弹出窗口的终端

php - 随机变量时 undefined offset ?

c++ - 为什么 operator new function - 放置形式在类里面可以?

c++ - 包扩展不在最后一个参数中的可变参数函数模板

c++ - C++11的CAS如何实现Valois的Queue

kotlin - 在 Kotlin 中从不相交范围的并集生成随机数的最有效方法是什么?

vb.net - For-Next-语句中的新随机数重复相同的值