我正在尝试学习 C++11随机的东西,所以我从这个站点复制了一个示例,该站点在 stackoverflow 上找到...
我想在这里实现的是使用std::xor_combine模板来组合两个引擎并使用第三个引擎对其进行初始化。根据上面的链接,这应该是可能的,但是自从 Tr1 报告以来,这里似乎有些事情发生了变化?
此外,您将在代码中看到一个指数分布对象,所以还有一个问题是如何将xor_combine lobject 与分布结合起来,以便将“组合”传递给分布operator()?
Visual Studio 给了我下面代码中描述的错误...
#include<iostream>
#include<random>
#include<ctime>
using namespace std;
int main()
{
minstd_rand gen1;
mt19937 gen2;
linear_congruential_engine<unsigned long, 34999, 0, 3405989> seeder;
seeder.seed(static_cast<unsigned long>(time(false)));
xor_combine<minstd_rand, 4, mt19937, 9> combin;
exponential_distribution<float> expdist(2);
combin.seed(seeder);
// generate numbers
for(int i = 0; i < 10; ++i) // error in <random>
cout << combin() << endl; // ERROR C:2039 generate is not a member of std::congruential_engine<...> etc...
cin.get();
return 0;
}
1. 如何将第 3 个引擎传递给 xor_combine 对象?
2. 如何将 xor_combine 对象传递给分布对象? *编辑*
#include<iostream>
#include<random>
#include<ctime>
int main()
{
std::minstd_rand gen1;
std::mt19937 gen2;
std::xor_combine<std::minstd_rand, 3, std::mt19937, 6> combin(gen1, gen2);
std::uniform_int_distribution<unsigned int> dist(0,37);
combin.seed(static_cast<unsigned int>(time(0)));
std::cout << dist( combin ) << std::endl;
std::cin.get();
return 0;
}
错误 1 错误 C2352: 'std::xor_combine<_Engine1,_S1,_Engine2,_S2>::max' : 非法调用非静态成员函数 c:\program files (x86)\microsoft visual studio 11.0\vc\include\ xutility 3455 项目1 1