我有一个类的成员函数,它应该生成一个范围内的随机数。为此,我使用 rand() 函数。该函数生成一个随机数,如下所示:
unsigned seed;
seed = time(0);
srand(seed);
std::cout << "Random Number: "<< rand() << std::endl;
Run Code Online (Sandbox Code Playgroud)
该函数在两个不同的对象上调用。结果是:
Random Number: 1321638448
Random Number: 1321638448
Run Code Online (Sandbox Code Playgroud)
每次我调用它时都是一致的。我究竟做错了什么?
(将我的评论转换为答案)。
rand对于大多数应用程序,您实际上只想在运行程序的过程中播种一次。多次播种需要您获得不同的随机种子,而且很容易搞砸。
在您的情况下,该time函数通常返回分辨率为秒的内容(尽管标准实际上并不要求这样做)。因此,如果您time在同一秒内调用两次,您可能会返回相同的值。这可以解释为什么你会得到重复的值:你用相同的值播种随机数两次,然后立即查询它的随机数。
对此的最佳解决方案是只为随机发生器提供一次种子。通常,您会在main.
如果您确实想多次为随机发生器提供种子,请确保您使用的种子几乎是随机的。否则,您就有可能发生类似的事情。