簡體   English   中英

如何創建variate_generator的向量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM