首先简单的介绍一个扑克牌洗牌的方法,假设一个数组 poker[52] 中存有一副扑克牌1-52的牌点值,使用一个for循环遍历这个数组,每次循环都生成一个[0,52)之间的随机数RandNum,以RandNum为数组下标,把当前下标对应的值和RandNum对应位置的值交换,循环结束,每个牌都与某个位置交换了一次,这样一副牌就被打乱了。
for (int i = 0; i < 52; ++i)
{
int RandNum = rand() % 52;
int tmp = poker[i];
poker[i] = poker[RandNum];
poker[RandNum] = tmp;
}
random_shuffle 的第三个参数,需要的是一个函数对象, 这个函数对象的参数是算法遍历序列时的index,返回值是0-X 之间的一个随机数,这个 X 可由用户来决定。默认的random_shuffle中, 被操作序列的index 与 rand() % N 两个位置的值交换,来达到乱序的目的。
#include <iostream>
#include
本文通过一个简单的扑克牌洗牌示例介绍了random_shuffle算法的工作原理。利用for循环和随机数生成,实现数组元素的随机交换,达到洗牌效果。random_shuffle的第三个参数可以接受一个函数对象,用于生成0到指定范围内的随机数,以此控制乱序的程度。
订阅专栏 解锁全文
1260

被折叠的 条评论
为什么被折叠?



