在C#中C++相当于新的Random(种子)

der*_*khh 6 c# c++ random

当我们在C#中使用随机数生成器时,我们可以定义一个变量

private Random _rndGenerator;
Run Code Online (Sandbox Code Playgroud)

在课堂上然后打电话

_rndGenerator = new Random(seed);
Run Code Online (Sandbox Code Playgroud)

正确地在类的构造函数中.

我的问题是:

什么是这种定义的C++等价物(即类中的RNG).我认为这不是一个正确的使用方法

srand((unsigned int)seed);
Run Code Online (Sandbox Code Playgroud)

对?

R. *_*des 14

C++ 11具有更强大的随机数生成功能.这是一个例子:

#include <random>
#include <functional>

std::size_t get_seed(); // whatever is the preferred way of obtaining a seed

typedef std::mt19937 engine_type; // a Mersenne twister engine
std::uniform_int_distribution<engine_type::result_type> udist(0, 200);

engine_type engine;

int main()
{
  // seed rng first:
  engine_type::result_type const seedval = get_seed();
  engine.seed(seedval);

  // bind the engine and the distribution
  auto rng = std::bind(udist, engine);

  // generate a random number
  auto random_number = rng();

  return random_number;
}
Run Code Online (Sandbox Code Playgroud)

获得种子的方法有很多种.<random>提供对std::random_device类的一些硬件熵的潜在访问,您可以使用它来为您的PRNG播种.

std::size_t get_seed() {
    std::random_device entropy;
    return entropy();
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你没有使用C++ 11工具集,那么[Boost.Random](http://www.boost.org/libs/random/)就是C++ 11随机库的基础.无论如何,_please_,不要使用`rand`. (2认同)