作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想使用 std::mt19937 随机数生成器生成 0 到 255 之间的数字列表。“一旦选择了一个数字,它就不应该再次出现在集合中。” - 这一点我不知道该怎么做。这个数学术语逃脱了我(!)
std::mt19937 twister;
std::uniform_int_distribution<int> distribution;
twister.seed(91210);
distribution = std::uniform_int_distribution<int>(0,255);
std::vector vNumbers;
vNumbers.resize(256);
for( int n = 0; n < 256; ++ n )
vNumbers[n] = distribution(twister);
最佳答案
有相应的算法:
// fill a vector ith [0..255]:
std::vector<int> vNumbers(256);
std::iota(vNumbers.begin(), vNumbers.end(), 0);
// shuffle it
std::random_shuffle(vNumbers.begin(), vNumbers.end());
// done
使用 C++11,您可以为 RNG 传递您自己的生成器:(另请参阅注释)
std::shuffle(vNumbers.begin(), vNumbers.end(), twister);
或者您可以自己推出(谷歌 Fisher-Yates,或查看 Knuth)
当然iota
可以用下面的替换
for (int i=0; i<256; ++i) vNumbers[i] = i;
关于c++ - std::mt19937 具有非重复值的梅森扭曲分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17942566/
我在 Ubuntu 10.10 (x86)(来自 apt 的标准包)上使用 mod_perl 2、mason 和 apache 2.2。当我向我的服务器发送 HTTP 请求时,我得到以下信息: $ n
我是一名优秀的程序员,十分优秀!