通过引用辅助函数传递随机数生成器mt19937是否正确?

Leg*_*dre 3 c++ random c++11

int helper( mt19937& generator ){ 

    do stuff; 
    return 0; 

}

#include "helper.h" 
// helper function defined in separate source file and included in header

mt19937 generator(time(NULL));

int main( ) {

    help(generator);

}
Run Code Online (Sandbox Code Playgroud)

创建和播种mt19937随机数生成器是否正确,然后通过引用将其传递给函数使用?

我这样做是因为我知道我只想种下mt19937一次.但是我在需要使用随机数生成器的单独源文件中有很多辅助函数.例如,具有随机播放功能.

Nat*_*ica 7

是的,通过引用传递发电机是正确的.在mt19937需要具有内部状态进行修改,以获得下一个随机数.如果您按值传递生成器,那么您将复制该状态,然后多个函数将获得相同的随机数.这也是你不能传递它的原因,const&因为它不能修改那个内部状态const.

  • *“这违反了使用如此出色的生成器的目的” *-不一定。对于某些用例,可重复的序列非常理想。 (2认同)
  • @BenjaminLindley在这种情况下,你应该每次运行都用相同的种子播种。 (2认同)