我有一张带有52卡的Deck矢量,我想把它洗牌.
vector<Card^> cards;
Run Code Online (Sandbox Code Playgroud)
所以我用过这个:
random_shuffle(cards.begin(), cards.end());
Run Code Online (Sandbox Code Playgroud)
问题是它每次都给我相同的结果,所以我曾经srand随机化它:
srand(unsigned(time(NULL)));
random_shuffle(cards.begin(),cards.end());
Run Code Online (Sandbox Code Playgroud)
这仍然不是真正随意的.当我开始交易卡时,它与上次运行时相同.例如:"1.交易:A,6,3,2,K; 2.交易:Q,8,4,J,2",当我重新启动程序时,我得到完全相同的交易顺序.
然后我用srand(),并random_shuffle与它的第3个参数:
int myrandom (int i) {
return std::rand()%i;
}
srand(unsigned(time(NULL)));
random_shuffle(cards.begin(),cards.end(), myrandom);
Run Code Online (Sandbox Code Playgroud)
现在它正在工作并且总是在重新运行时给我不同的结果,但我不知道为什么它以这种方式工作.这些功能如何运作,我在这做了什么?