c – 在多个功能中共享随机引擎

前端之家收集整理的这篇文章主要介绍了c – 在多个功能中共享随机引擎前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我的问题简而言之:如何在不将引擎作为参数传递的情况下从另一个函数访问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();
}

解决方法

感谢你的帮助.我将解决方案复制到答案部分,以便将其标记为已接受.
#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); 
  func_a();
}

猜你在找的C&C++相关文章