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

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

private Random _rndGenerator; 

在课堂上然后打电话

 _rndGenerator = new Random(seed); 

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

我的问题是:

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

 srand((unsigned int)seed); 

对?

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

 #include  #include  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 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; } 

获得种子的方法有很多种。 使用std::random_device类提供对某些硬件熵的潜在访问,您可以使用它来为PRNG设定种子。

 std::size_t get_seed() { std::random_device entropy; return entropy(); } 

C ++有一个内置的全局随机数生成器。 如果你想为它播种,那么srand((unsigned int)seed)就是你的选择。 但这与您展示的C#代码并不完全相同。 当你写:

 Random _rndGenerator = new Random(seed); 

您将获得一个单独的随机数生成器实例。 因此,您可以在程序中使用多个随机数生成器。 据我所知,C ++库没有这样的结构,尽管C ++ 11看起来像。

简而言之,如果您使用的是旧版本的C ++,或者您只需要在程序中使用一个RNG,则srand((unsigned int)seed)是正确的。 如果您需要多个RNG,那么使用C ++ 11,或者自己动手。