如何在向量

时间:2017-10-23 07:13:03

标签: c++ arrays boost

我使用Boost C ++生成具有不同给定范围的随机整数样本。每个范围对应一个组。例如,对于范围(低,高),我可以使用:
    boost::mt19937 engine (seed);
    boost::bind(boost::random::uniform_int_distribution<>(low, high), engine);

我有22个这样的组(每个组具有不同的给定范围),我需要从每个uniform_int_distribution(对应于每个组)创建大量(总共2千万)个样本。

为了提高效率,我想将不同的uniform_int_distributions保存在数组或向量中:
    vector <boost::???> distributions_groups[22];

我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

您可以通过打包到std::vector<boost::function<int (void)>> distributions_groups; distributions_groups.push_back ( boost::bind ( boost::random::uniform_int_distribution<>(low, high) , engine ) );

来存储它们
{{1}}

请注意,标准库中提供了所有这些内容(假设支持C ++ 11标准)。

答案 1 :(得分:0)

我想你想要保存vector中的随机数。

我会改用lambda。

   boost::mt19937 engine( seed ) ;
   boost::random::uniform_int_distribution<int> distribution(
      min,
      max);

   std::vector < std::vector<int> > 
                 distributions_groups( 22 , std::vector<int>(each_vec_size) );

   auto gen = [distribution, &engine]() { return distribution(engine); } ; 

   // Example :
   for (auto i : distributions_groups) 
   {

      std::generate( begin(i) , end(i) , gen );
      std::cout <<  '\n';
      for (auto j : i) 
      {
         std::cout << j << " ";
      }
   }

Demo Here