1. rand()函数
rand()生成0-32767之间的随机数,具体的上界取决于所使用的C++实现。该上界存储在cstdlib定义的常量RAND_MAX中。如果想知道rand()能生成的最大随机数,把RAND_MAX发送给cout即可。 仅使用rand()生成的随机数是伪随机数,每次执行的结果都是一样的。
int a = rand();
2. 为随机数生成器确定种子
rand()生成的伪随机数每次执行都会有相同的结果,为获得真正的随机数,需要为随机数生成器确定种子,即提供一个称为“种子”的数,用于确定伪随机数序列的起始位置。
srand(static_cast<unsigned int>(time(0)))
上面这段代码即是基于当前日期和时间为随机数生成器确定种子。如果希望程序在每次运行时生成不同的随机数序列,则应当在执行rand()之前先执行一次上面这段代码。
3. 获得某个范围中的随机数
假设需要取得区间为[a,b)的随机数,则可以这样:
int randomNum = (rand() % b) + a;
然而,用取模运算符来生成范围内的随机数可能会导致不均匀,某些数字可能出现的概率会更大,因为RAND_MAX不一定能被被选择的数字b整除,这就会导致某些数字出现的概率会比另一些大。
4. 将序列中的元素进行乱序
若要将序列中的元素进行乱序,应当使用random_shuffle()算法。与生成单个随机数时一样,如果要每次执行程序时所获得的序列次序总是不相同,则在使用random_shuffle()之前,应当为随机数生成器确定种子。
srand(static_cast<unsigned int>(time(0)));
random_shuffle(list.begin(),list.end());
random_shuffle()需要序列的起点迭代器和终点迭代器来进行乱序操作。