【发布时间】:2015-01-20 18:33:31
【问题描述】:
我目前正在尝试实现一个使用接受拒绝方法的随机数生成器(类)。因此,我需要不同的 C++11 随机数分布(在我的情况下是正态分布和均匀分布)。我想让随机数尽可能好,因此想使用以下来构建函数:
[...]
#include <random>
#include <vector>
[...]
std::vector<int> seeds(16);
std::mt19937 mt;
std::minstd_rand seed_rng(101); // random seed
for(size_t i=0;i<16;++i) seeds[i]=seed_rng();
std::seed_seq seq(seeds.begin(), seeds.end());
mt.seed(seq);
rng_normal = std::bind(ndist, std::ref(mt));
[...]
这非常有效。但是当我现在尝试将所有这些都放在构造函数中时,我不能再使用种子序列的初始化了。我检查了 c++ 参考,但只遇到了 std::seed_seq::generate,这不是正确的解决方案。
有没有办法在填充向量后在我的初始化列表中构造种子序列?
有关 seed_seq 的参考,请参见此处:
http://en.cppreference.com/w/cpp/numeric/random/seed_seq
感谢您的任何建议!
【问题讨论】:
-
将此代码放入构造函数有什么问题?或者您是在问您可以在初始化列表中完成所有事情吗?
-
@Praetorian 是的,对不起。我想在初始化列表中完成所有工作。
标签: c++ c++11 random-seed