std :: variate_generator в VS2012

я использовал 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.

Теперь я поместил этот код в решение VS2012, и я получаю сообщение об ошибке: std::variate_generator не является членом std,

имеет std::variate_generator переехал или был удален?

2

Решение

variate_generators не используются в окончательной стандартной версии <random>, variate_generator был частью tr1, но так и не вошел в стандарт, поэтому я немного удивлен std::variate_generator работал в VS2010 (в отличие от std::tr1::variate_genrator). Я верю, что он все еще существует в пространстве имен tr1 VS2012.

Вместо этого вы можете сделать следующее:

#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.
4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru