私はC++11のランダムなものを学ぼうとしているので、stackoverflowでここにあるこのサイトから例をコピーしました...
ここで達成したいのは、std :: xor_combineテンプレートを使用して、2つのエンジンを結合し、3番目のエンジンで初期化することです。link aboweによると、これは可能であるはずですが、Tr1レポート以降、ここでいくつかの変更が行われているようです。
また、以下のコードで指数分散オブジェクトを設定します。もう1つの質問は、xor_combine lobjectをディストリビューションと組み合わせて、「combin」をディストリビューション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 Project1 1