VS2012 中的 std::variate_generator

fis*_*ood 2 c++ c++11 visual-studio-2012

std::variate_generator在VS2010项目中使用了如下方式:

#include <random>
...
using std::variate_generator;
using std::mt19937;
using std::uniform_real_distribution;

typedef mt19937                                     Engine;
typedef uniform_real_distribution<float>            Distribution;
typedef variate_generator< Engine, Distribution >   Generator;  

Generator r( Engine((DWORD)time(NULL)), Distribution(0.0f, 1.0f) ); 

// from now, calling float rnd = r() gave me a random number between 0.0f and 1.0f in rnd.
Run Code Online (Sandbox Code Playgroud)

我现在已将此代码放入 VS2012 解决方案中,我收到的错误消息是,它std::variate_generator不是std.

std::variate_generator移动或已删除?

bam*_*s53 6

variate_generators 没有在<random>. std::variate_generatorvariate_generator 是 tr1 的一部分,但从未将其纳入标准,所以我对在 VS2010 中工作(而不是在 VS2010 中工作std::tr1::variate_genrator)感到有点惊讶。我相信它仍然存在于 VS2012 的 tr1 命名空间中。

您可以执行以下操作:

#include <random>
#include <functional> // for std::bind
...
using std::mt19937;
using std::uniform_real_distribution;

typedef mt19937                                     Engine;
typedef uniform_real_distribution<float>            Distribution;

auto r = std::bind(Distribution(0.0f, 1.0f), Engine((DWORD)time(NULL)));

// from now, calling float rnd = r() gave me a random number between 0.0f and 1.0f in rnd.
Run Code Online (Sandbox Code Playgroud)