gpt4 book ai didi

c++ - std::uniform_real_distribution 重新生成相同的随机数

转载 作者:搜寻专家 更新时间:2023-10-31 01:30:35 24 4
gpt4 key购买 nike

在运行下面的代码时,arr 的前半部分等于后半部分。为什么?我什至尝试了各种种子,例如std::chrono::system_clock::now().time_since_epoch().count()。谢谢。

#include <algorithm>
#include <iostream>
#include <random>


template<typename DistributionType>
class Rng
{
public:
template<typename ...Args>
Rng(Args&&... args) : dist(args...) { }

typename DistributionType::result_type operator()()
{
return dist(gen);
}

private:
std::default_random_engine gen;

DistributionType dist;
};


class UniformRealRng : public Rng<std::uniform_real_distribution<double>>
{
public:
UniformRealRng(const double a, const double b) : Rng(a, b) { }
};

int main()
{
constexpr int sz = 6;
constexpr int k = sz / 2;
double arr[sz];

UniformRealRng rng(0.0, 1.0);
std::generate(arr, arr + k, rng);
std::generate(arr + k, arr + sz, rng);

for (int i = 0; i < sz; ++i)
{
std::cout << arr[i];
}
std::cout << "\n";
}

最佳答案

std::generate 按值获取其第三个参数,因此 rng 被复制。

为了安全起见,可以删除复制:

Rng(Rng&)             = delete;   
Rng& operator=(Rng&) = delete;

关于c++ - std::uniform_real_distribution 重新生成相同的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47647837/

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