【发布时间】:2017-08-24 02:56:43
【问题描述】:
我正在 C++ 类中编写离散分布随机数生成器。要求是:
- 我不想在每次使用时都创建一个discrete_distribution 对象。我知道分发对象是轻量级的,但是我的权重数组太长了,成本仍然太高。另外,我需要在这个类的不同函数中使用分布对象。
- 我需要不时更改分布(权重数组)
- 不知道类构建时的准确分布(权重数组)
目前我有两种解决方案,在类中使用random_device rd; mt19937 engine; 初始化随机数引擎,在初始化列表中使用engine(rd())。
一种是用discrete_distribution<> *d=new discrete_distribution<>(weight_array,weight_array+weight_array_size)创建discrete_distribution对象并将指针存储在类中。每次调用 (*d)(engine) 生成一个随机数,我只需要删除分布,新建一个更新权重数组即可。
另一种方法是在类中定义discrete_distribution<> d,用d=discrete_distribution<>(weight_array,weight_array+weight_array_size)更新权重数组,这样我们就可以用d(engine)生成随机数,不用担心指针了。
但似乎这两种方式都不是使用 c++ 对象的经典方式。他们错了吗?这样写代码有什么缺点吗?
谢谢
【问题讨论】:
标签: c++ random boost boost-random