sách gpt4 ăn đã đi

C++ - sử dụng 和函数生成随机双 vector

In lại 作者:搜寻专家 更新时间:2023-10-31 00:14:47 31 4
mua khóa gpt4 giày nike

我编写了以下函数来生成 double 的随机 vector :

void getrands(vector *x)
{
int N=(*x).size();
uniform_real_distribution unif(0.0,1.0);
mt19937 re(time(NULL));
auto generator = bind(unif,re);
generate_n((*x).begin(),N,generator);
}

在我的 main() 程序中,如果我尝试在多个 vector 上调用此函数(比如我想生成 10 个随机 vector ),我最终会得到所有 vector 都具有相同随机数的结果,因为没有足够的时间过去了,得到了一个很好的重新种子。什么是更好的方法来做到这一点?我应该创建一个随机数组然后将其转换为 vector 吗?我习惯了 matlab,在那里我可以调用 X=rand(n,m)...

Cảm ơn!

câu trả lời hay nhất

更好的方法是使用 std::thiết_bị_ngẫu_nhiên 为您的随机数生成器播种.

mt19937 re(std::random_device{}());

而且您可能应该将 RNG 作为参数传递给函数,而不是每次迭代都创建一个新实例。

此外,请注意 std::bind 会复制其参数,因此您可能希望在将 RNG 作为参数传递给绑定(bind)


我会将你的函数重写为

template
void getrands(vector& x, Generator& gen, unsigned num)
{
generate_n(std::back_inserter(x), num, std::ref(gen));
}

并称它为

uniform_real_distribution unif(0.0,1.0);
mt19937 re(std::random_device{}());
auto generator = bind(unif, std::ref(re));

vector vs;

getrands(vs, generator, 10);

这允许您重复使用相同的 RNG,您无需在调用函数之前将 vector 设置为正确的大小,并且可以根据需要向 vector 添加值。

Live demo

关于c++ - 使用 和函数生成随机双 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21695073/

31 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress