我有一个std :: vector,我需要随机播放.它只有大约20名成员.每次运行程序时,它还需要产生不同的shuffle.
现在我正在使用random_shuffle,但是每次运行程序时它都会给出相同的结果.我试过srand(unsigned(time(NULL)));在这个帖子中提出的,但是,这在我的平台上不起作用.
如果可能,我想只使用标准代码.
编辑:这是我的实现:
vector<Tile>gameTiles;
gameTiles.push_back(Tile(0,0));
gameTiles.push_back(Tile(0,1));
gameTiles.push_back(Tile(0,2));
gameTiles.push_back(Tile(0,3));
gameTiles.push_back(Tile(0,4));
//etc. ~20 member
random_shuffle(gameTiles.begin(), gameTiles.end());
Run Code Online (Sandbox Code Playgroud)
Ben*_*ley 10
如果srand(unsigned(time(NULL)));没有帮助,那么您的实现不能使用标准rand()作为其随机数生成器.在这种情况下,有一个替代版本random_shuffle采用自定义随机数生成器.你可以传递一个包装器rand(),如下所示:
int MyRand(int n)
{
return std::rand() % n;
}
// ...
std::random_shuffle(bar.begin(), bar.end(), MyRand);
// ...
Run Code Online (Sandbox Code Playgroud)
如果你想要一个分布更均匀的东西,请查看C++ 11 <random>标题.