5

所以简而言之,我的问题是:如何访问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();
}
4

1 回答 1

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();
}
于 2013-10-26T21:08:57.280 回答