[英]How to create vector of variate_generator?
我正在尝试创建增强随机数生成器的向量。
我试图创建指向variate_generators的函数指针,也没有太大的运气。
#include <iostream>
#include <boost/random.hpp>
using namespace std;
int main(int argc, const char *argv[])
{
const double mean = 0.0;
const double sigma = 1.0;
// Setup aliases
typedef boost::normal_distribution<> NormalDistribution;
typedef boost::mt19937 RandomNumberGenerator;
typedef boost::variate_generator<RandomNumberGenerator&, NormalDistribution> NormalGenerator;
vector<NormalGenerator> gen_vec;
RandomNumberGenerator rng;
rng.seed(12345);
NormalDistribution noise_distribution(mean, sigma);
NormalGenerator rng_eng(rng, noise_distribution); // create RNG
gen_vec.push_back(rng_eng);
return 0;
}
我希望使用gen_vec获得一个函数,以便为向量中的给定元素生成一个随机数。 但是,当我尝试编译时会引发此错误。
/usr/include/boost/random/detail/pass_through_engine.hpp:27: error: non-static reference member \u2018main(int, const char**)::RandomNumberGenerator& boost::random::detail::pass_through_engine<main(int, const char**)::RandomNumberGenerator&>::_rng\u2019, can't use default assignment operator
我猜这是因为我没有正确包装variate_generators。
我要纠正的东西难道不是很多吗?
首先,您的示例代码确实可以编译而没有任何错误消息(GCC 8.2.1,增强版1.69)。
但是,不要那样做。 只需使用boost :: variate_generator <> :: distribution()即可设置新的分布。
NormalDistribution noise_distribution(mean, sigma);
NormalDistribution other_distribution(5.0, 2.0);
NormalGenerator rng_eng(rng, noise_distribution); // create RNG
// ... generate RNG using noise_distribution
rng_eng.distribution() = other_distribution;
// ... generate RNG using other_distribution
rng_eng.distribution() = noise_distribution;
// ... generate RNG using noise_distribution again
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.