所以我的问题简而言之:如何在不将引擎作为参数传递的情况下从另一个函数访问main()
中初始化的随机引擎?
我读到这是一个习惯,只能在一个程序中初始化一个随机引擎。
我会在main()
函数的开头这样做:
#include <iostream>
#include <random>
#include <ctime>
using std::cout;
using std::endl;
using std::default_random_engine;
using std::uniform_int_distribution;
int main() {
int seed = time(0);
default_random_engine engine(seed);
uniform_int_distribution<int> dist(0,100);
cout << "Random num: " << engine(dist) << endl;
}
但是如何让其他功能可以访问?例如,在一个嵌套结构中,函数func_a
调用func_b
,它应该用引擎生成的随机数做某事。
例如:
#include <iostream>
#include <random>
#include <ctime>
using std::cout;
using std::endl;
using std::default_random_engine;
using std::uniform_int_distribution;
void func_b() {
// do sth
cout << "Print a random number: " << endl;
}
void func_a() {
func_b();
}
int main() {
int seed = time(0);
default_random_engine engine(seed);
uniform_int_distribution<int> dist(0,100);
func_a();
}
#include <iostream>
#include <random>
#include <ctime>
using std::cout;
using std::endl;
using std::default_random_engine;
using std::uniform_int_distribution;
////////////////////////
// GLOBAL VARIABLES
////////////////////////
int seed = time(0);
default_random_engine engine(seed);
////////////////////////
// FUNCTION DEFINITIONS
////////////////////////
void func_b() {
uniform_int_distribution<int> dist(0,100);
cout << dist(engine) << endl;
}
void func_a() {
func_b();
}
int main() {
int seed = time(0);
default_random_engine engine(seed);
uniform_int_distribution<int> dist(0,100);
func_a();
}
答案 0 :(得分:3)
感谢您的帮助。我将解决方案复制到答案部分,以便将其标记为已接受。
#include <iostream>
#include <random>
#include <ctime>
using std::cout;
using std::endl;
using std::default_random_engine;
using std::uniform_int_distribution;
////////////////////////
// GLOBAL VARIABLES
////////////////////////
int seed = time(0);
default_random_engine engine(seed);
////////////////////////
// FUNCTION DEFINITIONS
////////////////////////
void func_b() {
uniform_int_distribution<int> dist(0,100);
cout << dist(engine) << endl;
}
void func_a() {
func_b();
}
int main() {
int seed = time(0);
default_random_engine engine(seed);
uniform_int_distribution<int> dist(0,100);
func_a();
}