我想生成一个遵循均匀分布而不重复的随机整数。例如,我将通过此代码生成6个统一编号如何在C++中生成一致的随机整数而不重复
vector<int> container;
container.reserve(lossNum);
std::vector<unsigned int>::iterator it;
// Our Random Generator
std::mt19937 eng{ std::random_device{}() };
int max_num=6
for (int i = 0; i<max_num; i++) {
unsigned int q = std::uniform_int_distribution<unsigned int>{ 0, max_num }(eng);
do {
q = std::uniform_int_distribution<unsigned int>{ 0, max_num }(eng);
it = std::find(container.begin(), container.end(), q);
} while (it != container.end());
container.push_back(q);
}
而且我在120.000以上的代码上面运行并画出图。但是这个数字并没有显示出统一的分布。我的代码中有什么问题?我正在使用visual studio 2015来运行它。
另外,如果我在linux(Ubuntu)环境下运行。我如何修改标准C++的上述代码?由于
这是我的代码
既然你没有这个词在你的文字 “随机”,'container.push_back(I);'会做的伎俩。 –
对不起,它必须是随机的 – Jame
@ user8430我不知道这可以提供什么帮助,但是你需要连续两次请求一个随机数 - 在循环前和循环中。尝试声明'unsigned int q;'而不将它初始化为一个随机数。 – LogicStuff