C# C++;C中新随机(种子)的等价物#

C# C++;C中新随机(种子)的等价物#,c#,c++,random,C#,C++,Random,当我们在C#中使用随机数生成器时,我们可以定义一个变量,如 private Random _rndGenerator; 在课堂上,然后打电话 _rndGenerator = new Random(seed); 在类的构造函数中正确 我的问题是: 什么是C++等价于这样的定义(即类中的RNG)。我认为这不是一个正确的使用方法 srand((unsigned int)seed); 是吗?C++11具有更强大的随机数生成功能。下面是一个例子: #include <random> #i

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

private Random _rndGenerator;
在课堂上,然后打电话

_rndGenerator = new Random(seed);
在类的构造函数中正确

我的问题是:

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

srand((unsigned int)seed);

是吗?

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

C++有一个内置的全局随机数生成器。如果您想对其进行种子设定,那么
srand((unsigned int)seed)
是一种方法。不过,这与您展示的C代码并不完全相同。当你写作时:

Random _rndGenerator = new Random(seed);
您将获得一个单独的随机数生成器实例。因此,您的程序中可以有多个随机数生成器。据我所知,C++库没有这样的结构,尽管C++ 11确实如此。


简短地说,<代码> SRAND((无符号INT)种子)是正确的,如果您使用的是C++的旧版本,或者如果您只想在程序中使用一个RNG。如果你需要多个RNG,那么使用C++ 11,或者滚动自己的.< /P>,如果你不使用C++ 11工具集,那么C++ 11随机库就有松散的基础。在任何情况下,请不要使用

rand
rng_-type::result_-type
应该是
engine_-type::result_-type
@MSalters-oops,忘记修复那个。谢谢。@R.MartinhoFernandes-请澄清
get_seed()
在上面的代码示例中是伪函数还是标准库的成员?就我所见,
std::time(0)
是产生种子的方法。@Dan它只是获得种子的首选方法的占位符。我以我喜欢的方式添加了种子。
Random _rndGenerator = new Random(seed);