gpt4 book ai didi

c++ - srand() + rand() 局部作用域

转载 作者:搜寻专家 更新时间:2023-10-30 23:55:43 25 4
gpt4 key购买 nike

我有一个调用 srandrand 的函数,如下所示:

void foo() {
int seed = some_operation();
std::srand(seed);
int value = std::rand();
// Do something with random value
}

但是,我不想更改rand 的全局状态。那么获取随机数最简单的方法是什么?

要求:

  • 随机数必须是基于种子的确定性
  • C++11 没问题
  • foo 应该是线程安全的
  • 不应修改 rand 的全局状态

编辑:

有一个stackoverflow question询问如何生成随机数。接受answer然而展示了如何使用慢速 std::random_device 生成真正唯一的随机数。我只需要一个使用固定种子的简单生成器。

最佳答案

C++11 is fine

然后使用新的pseudorandom number library :

#include <random>

int foo() {
int seed = some_operation();
std::minstd_rand rand(seed);
int value = rand();
// Do something with random value
}

minstd_rand 是一个简单的线性同余引擎,类似于 std::rand() 通常使用的引擎,但其状态封装在一个类中。如果您需要更高质量的伪随机序列,也可以使用其他引擎。如果您没有特定要求,Mersenne Twister std::mt19937 通常是一个不错的选择。

关于c++ - srand() + rand() 局部作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30484831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com