gpt4 book ai didi

c++ - 如何在 C++11 RNG 初始状态的本地和全局设置之间切换?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:29:02 26 4
gpt4 key购买 nike

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

我已经尝试过明显的“if”和“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;
}

最佳答案

使用三元引用:

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

这里,flag 是要测试的条件,rng 是“全局”随机对象,local 是更本地化的对象。

绑定(bind)对三元结果的引用在语法上是有效的:您不能使用 if 语句或类似的语句来实现,因为它们不是 表达式正确的类型。

从那时起,使用ref。只要 rnglocal 仍在范围内,这就有效。

关于c++ - 如何在 C++11 RNG 初始状态的本地和全局设置之间切换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30231616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com