小编Vik*_*tor的帖子

C++ random_shuffle()它是如何工作的?

我有一张带有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)

现在它正在工作并且总是在重新运行时给我不同的结果,但我不知道为什么它以这种方式工作.这些功能如何运作,我在这做了什么?

random c++-cli shuffle srand

3
推荐指数
1
解决办法
2784
查看次数

标签 统计

c++-cli ×1

random ×1

shuffle ×1

srand ×1