在程序c ++中更改随机种子

时间:2016-01-20 02:40:25

标签: c++ random

在我的程序中,我有一个函数return_random_vector(),它使用一组数字,比如1,2,3,4,5,然后返回2,5,1,4,3等数字的随机重新排列。

为了做到这一点,我设置了种子srand(time(NULL))。对于我的程序,我希望能够使用1,2,3,4,5再次调用此函数并获取其他重新排列它们,例如3,1,4,5,2

有没有办法设置srand()以便种子可以重置?

3 个答案:

答案 0 :(得分:3)

要获得不同的设置,您可以再次致电return_random_vector() ,而无需在其间调用srand()

在第一次调用srand((unsigned)time(NULL))后立即调用return_random_vector()可能会生成相同的集,因为time()可能会返回相同的值,即以秒为单位的已用时间。

因此,您实际上将种子重置为与第一次调用之前相同的值。将种子设置为相同的值将再次生成相同的随机数集。

您还可以查看std::shuffle (C++11)

答案 1 :(得分:0)

每次使用不同的值调用srand()时,都会初始化随机数生成器以返回不同的值序列。

以同样的方式再次调用srand()。由于时间值可能会有所不同,因此您将从rand()获得不同的结果序列。

如果可能需要在time()值更改之前执行此操作,则可以使用:     函数srand(时间(NULL)+兰特());

自从我上次写C ++以来已经有一段时间了,所以我不确定你是否需要在添加之前投出一个或另一个值,因为他们是一个或多个int和time_t。

答案 2 :(得分:0)

对于* nix系统,您可以试试这个

unsigned seed;

read(open("/dev/urandom", O_RDONLY), &seed, sizeof(seed));
srand(seed);

对于Windows,RtlGenRandom将为您提供一个随机字节数组,可用作种子。或者只是用作伪随机数。