私は離散分布乱数ジェネレータをC++クラスに記述しています。要件は次のとおりです。クラスのC++ discrete_distributionを再利用して再初期化する方法は?
- 私は、使用するたびにdiscrete_distributionオブジェクトを作成したくありません。私は流通オブジェクトが軽量であることを知っていますが、私の体重アレイは非常に長く、コストはまだ高すぎます。また、このクラスのさまざまな関数で配布オブジェクトを使用する必要があります。私はクラスが
を構築するとき、私は現在、私は後に、2つのソリューションを持って正確な分布(重量配列を)知らない
random_device rd; mt19937 engine;
の乱数エンジンを初期化し、初期化リストでengine(rd())
を初期化します。 discrete_distribution<> *d=new discrete_distribution<>(weight_array,weight_array+weight_array_size)
でdiscrete_distributionオブジェクトを作成し、そのクラスにポインタを格納します。私は乱数を生成するために(* d)(エンジン)を呼び出すたびに、分布を削除して、ウェイト配列を更新するために新しいものを作成するだけです。
discrete_distribution<> d
をクラスに定義し、ウェイト配列をd=discrete_distribution<>(weight_array,weight_array+weight_array_size)
に更新すると、d(engine)
の乱数が生成され、ポインタについて心配する必要がなくなります。
しかし、どちらの方法も古典的な方法ではなく、C++オブジェクトを使用しているようです。彼らは間違っていますか?このようにコードを書くのに欠点はありますか?
おかげ