我想使用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);
Run Code Online (Sandbox Code Playgroud)
seh*_*ehe 10
有算法:
// 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
Run Code Online (Sandbox Code Playgroud)
使用C++ 11,您可以为RNG传入自己的生成器:(另请参阅注释)
std::shuffle(vNumbers.begin(), vNumbers.end(), twister);
Run Code Online (Sandbox Code Playgroud)
或者你可以自己推(谷歌Fisher-Yates,或看看Knuth)
当然iota可以用以下来代替
for (int i=0; i<256; ++i) vNumbers[i] = i;
Run Code Online (Sandbox Code Playgroud)