实际上没有任何必要创建一个将调用srand()
与一个 to结合起来的函数rand()
。
srand()
用于播种(即初始化)随机数序列。随后的和重复的调用rand()
然后用于实际生成随机数。(rand()
更新随机数生成器的内部状态,因此(通常)下次调用时不会再次生成相同的数字。)
如果您在调用srand()
之前每次调用rand()
,则每次都会重新初始化序列。如果每次传递的种子都相同,则您的函数每次都将返回相同的随机数。
因此,无论如何,这两个电话都必须分开。
您可能还对<random>
C++11 中标头提供的随机数生成框架感兴趣。这是示例代码(主要从 cppreference 复制):
#include <random>
#include <iostream>
int main()
{
/* Initialise and seed. Do this only once. */
std::random_device rd;
std::mt19937 gen(rd());
/* Define how to use the raw random numbers, i.e.
a probability distribution. In this case a
uniform distribution with six possible integer
events. */
std::uniform_int_distribution<> dis(1, 6);
/* Generate a series of random events. No reseeding. */
for(int n=0; n<10; ++n)
std::cout << dis(gen) << ' ';
std::cout << std::endl;
}
<random>
cppreference 对标头及其提供的许多选项有很好的描述:http: //en.cppreference.com/w/cpp/numeric/random。
其中大部分灵感来自 Boost 随机库,它提供了更多选项: http: //www.boost.org/doc/libs/1_52_0/doc/html/boost_random.html(链接到 1.52.0 版本)。因此,如果您不能使用 C++11,或者您需要标准未提供的功能,那么使用 Boost 库可能是一个好主意。