Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:我可以将rand()生成器保存到异步确定性的对象中吗?_C++_C++11_Asynchronous_Random - Fatal编程技术网

C++ C++;:我可以将rand()生成器保存到异步确定性的对象中吗?

C++ C++;:我可以将rand()生成器保存到异步确定性的对象中吗?,c++,c++11,asynchronous,random,C++,C++11,Asynchronous,Random,我四处寻找,但很难找到完全符合我需要的东西。在使用srand()设置种子后,我想使用rand()生成一系列随机数 关键是我需要异步执行此操作,并且可能会同时生成其他随机序列。我需要维护一次生成的相同的确定序列。因为rand()是全局的,所以我认为没有任何方法可以用rand()实现这一点 我心目中的解决方案将是类似于srand/rand的东西,但可以作为对象保存和传递。e、 g RandGenerator随机(srand_seed) int r=random.get_random(); 我不需要

我四处寻找,但很难找到完全符合我需要的东西。在使用srand()设置种子后,我想使用rand()生成一系列随机数

关键是我需要异步执行此操作,并且可能会同时生成其他随机序列。我需要维护一次生成的相同的确定序列。因为rand()是全局的,所以我认为没有任何方法可以用rand()实现这一点

我心目中的解决方案将是类似于srand/rand的东西,但可以作为对象保存和传递。e、 g

RandGenerator随机(srand_seed)
int r=random.get_random();

我不需要任何来自C++11的“额外随机”UTIL,但如果它们在这里对我有所帮助,我会使用它们。我只是不知道该去哪里找

我不需要任何来自C++11的“额外随机”UTIL

根据你的问题,C++11随机正是你需要的。在你的脑海里,它甚至看起来像是你的小解决方案

这是一个受以下启发的示例:

#包括
int main()
{
//使用默认的随机引擎。
//线程本地,以确保线程安全,并避免重新创建该大型对象。
线程本地std::默认随机引擎rnd(std::随机设备{}());
//1到6的均匀分布,如骰子
//它没有随机状态,只有数字应该具有的分布。
标准:均匀分布均匀分布(1,6);
//使用分布和随机引擎生成随机数。
int randomNumber=uniform_dist(rnd);//从1到6
}

我不需要任何来自C++11的“额外随机”UTIL
您心目中解决方案的示例正是C++11 random所做的。谢谢!!还有一个问题很抱歉-我怎样才能为这样的随机引擎播种种子?我查看了文档,但没有看到与
srand
(可能遗漏了一些内容)相同的输入。@BenWiley查看链接的参考链接。这解释了一切。我在那里写的例子实际上是从参考文献中偷来的。在我给你们看的代码中,随机引擎是用一个随机的物理设备来播种的。谢谢@GuillaumeRacicot-我想我明白了。对不起,如果我的问题听起来天真,我仍然觉得很新的C++。所以我猜当发行版初始化时,即使我设置了另一个随机引擎并在同一个线程中创建了另一个新发行版,它也会在初始化时保持随机引擎的使用?很抱歉,这是一个愚蠢的问题。我刚刚意识到我们正在将随机引擎传递到分发中。我太习惯C中的魔法球了。。。。谢谢大家!@不完全是本威利。随机引擎具有生成随机数所需的所有状态。您希望以线程安全的方式使用随机引擎。但是,该分布没有任何与随机数相关的状态。发行版实际上是轻量级的,将发行版作为本地对象没有错。该分布将简单地使用奇特的数学将生成的随机数应用于所需的分布。在这种特殊情况下,
uniform\u dist(rnd)
操作大致相当于
1+(rand()%6)
#include <random>

int main()
{
    // Use the default random engine.
    // Thread local for thread safety, and to not recreate that large object.
    thread_local std::default_random_engine rnd(std::random_device{}());

    // A a uniform distribution of 1 to 6, like a dice
    // It does not have the random state, but only the distribution the numbers should have.
    std::uniform_int_distribution<int> uniform_dist(1, 6);

    // Generate a random number using a distribution and the random engine.
    int randomNumber = uniform_dist(rnd); // from 1 to 6
}