如何在本地设置和全局设置之间以C 11 RNG的初始状态进行切换

How do I switch between local and global settings for the initial state of a C++11 RNG?

本文关键字:RNG 初始状态 设置 之间 全局设置      更新时间:2023-10-16

在下面给出的代码中,我想实现一个标志(或同样简单的东西),该标志与评论 local 设置并使用相同的效果 global 设置某个设置(在此示例中产生两个不同的数字),并在其他时间使用本地设置(在此示例中产生两个相同的数字)。

我尝试了明显的" if"answers" switch"结构,没有成功。

#include <iostream>
#include <random> 
void print();
std::seed_seq seed{1, 2, 3, 4, 5}; 
std::mt19937 rng(seed); // *global* initial state
std::uniform_real_distribution<> rand01(0, 1); 
int main()
{
    print();
    print();
    return 0; 
}
void print()
{
    std::mt19937 rng(seed); // *local* initial state
    std::cout << rand01(rng) << std::endl;
}

使用 ternary 和a 参考

std::mt19937& ref = flag ? rng : local;

在这里, flag是测试的条件, rng是"全局"随机对象,而 local是更本地化的对象。

将引用与三元的结果结合在句法上是有效的:您不能使用if语句或类似于正确类型的 empressions 相似。

从那时起,请使用ref。只要rnglocal保留在范围内。