gpt4 book ai didi

c++ - 对象数组的构造函数中的随机数

转载 作者:行者123 更新时间:2023-12-02 10:34:41 26 4
gpt4 key购买 nike

首先,很抱歉,这是一个愚蠢的问题,但是我最近学习了如何处理类(class)。
我的问题是我创建了一个构造函数,该构造函数使用以下语法为每个数据成员提供一个随机数:

#include <random>

...
//Constructor
cSystem::cSystem(void)
{
//Range of random numbers
double lower_bound = -100;
double upper_bound = 100;
std::uniform_real_distribution<double> unif(lower_bound,upper_bound);
std::default_random_engine re;

/*Initialization of data members*/
sMass=1.0014;
sPositionX= unif(re);
sPositionY= unif(re);
}

但是然后,我想在我的主要功能中创建这些“系统”的数组
int main (void)
{
cSystem systems[numsist]; //numsist is a constant defined to be 1000

//Function that writes its characteristics in a file using a method that returns positions
getPositions(systems);

return 0;
}

但是在文件中,我只是得到
-73.6924    -8.26997
-73.6924 -8.26997
-73.6924 -8.26997

我以为我要遍历数组的每个元素的构造函数,给它一个不同的随机值,但是好像在开始时给出了一个值,然后在整个 vector 中重复它。
我该怎么做才能以随机方式初始化每个元素的构造函数?

注意:我每次运行程序时也会得到相同的值,我认为种子没有变化,为什么会这样?

最佳答案

My problem is that I've created a constructor which gives every data member a random number


  • 缺省构造PRNG时,不会播种它。每次都会以其默认状态开始。
  • PRNG不应归任何一个类所有。播种它是昂贵的,并且应该由需要生成随机数的所有函数(每个线程)共享-将其与任何类分开。

  • 我希望选择一个特定的PRNG,但默认情况下,它看起来可能像这样:
    std::default_random_engine& prng() {
    // seed only one PRNG per thread that needs is:
    static thread_local std::default_random_engine gen(std::random_device{}());
    return gen;
    }

    现在,在您的程序中使用的每个分发函数(成员函数或其他函数)中,您都可以调用 prng()来获取生成器,将其种子一次,并且不会被过度播种。

    关于c++ - 对象数组的构造函数中的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60877293/

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