更改程序 C++ 中的随机种子
change random seed in program c++
在我的程序中,我有一个函数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()
以便可以重置种子?
要获得不同的集合,您可以再次调用return_random_vector()
,而无需在中间调用srand()
。
在第一次调用 return_random_vector()
后立即调用srand((unsigned)time(NULL))
可能会生成相同的集合,因为time()
可能会返回相同的值,即以秒为单位的经过时间。
因此,您实际上会将种子重置为与第一次调用之前相同的值。将种子设置为相同的值将再次生成相同的随机数集。
你也可以看看std::shuffle (C++11)。
每次使用不同的值调用 srand() 时,都会初始化随机数生成器以返回不同的值序列。
只需以相同的方式再次调用 srand()。由于时间值可能会有所不同,因此您将从 rand() 获得不同的结果序列。
如果可能需要在 time() 值更改之前执行此操作,则可以使用: srand(time(NULL)+rand());
距离我上次写C++已经有一段时间了,所以我不确定在添加之前是否需要转换一个或另一个值,因为它们是 int 和 time_t。
对于 *nix 系统,你可以试试这个
unsigned seed;
read(open("/dev/urandom", O_RDONLY), &seed, sizeof(seed));
srand(seed);
对于Windows,RtlGenRandom会给你一个随机字节数组,可以用作种子。或者只是用作伪随机数。
- 如何使用要传递给 mt19937 的可选随机种子参数设计函数
- 如何使用可选的随机种子参数创建 roll_die() 函数
- 除了 rand() 之外,是否有任何随机生成器库,开发人员可以手动设置种子?
- 如果我在每个平台上使用相同的种子,随机结果会相同吗?
- 随机化种子值C
- 为什么使用迭代器时必须重新设定随机生成器种子?
- 在给定种子和偏移量的情况下生成下一个伪随机值
- 设置随机种子独立rmath库
- 与C++2011不相关的并行随机种子
- 我应该使用从std::random_device种子的随机引擎,还是每次都使用std::random_device
- 如何生成随机种子/哈希以使Rand实际上是随机的
- 生成一个随机种子给srand()-不是时间(NULL)
- 在哪里初始化随机种子以通过多个随机模块使用
- 为什么起始值会影响种子随机的结果
- 更改程序 C++ 中的随机种子
- C++麦克风输入作为随机种子
- 使用srand作为随机种子时出现重复输出
- 随机生成器,种子不工作
- 多精度随机生成器种子错误
- 在伪随机生成器中使用常量种子从UT和GUI中获得不相同的数字