在0-1之间生成随机数以填充容器 最近我开始学习现代C++,我一直在想。我知道我可以用Mersenne捻线器创建伪随机数,方法如下: std::random_device rnd; std::mt19937 gen(rnd()); std::uniform_real_distribution<> dist(0.,1.);

在0-1之间生成随机数以填充容器 最近我开始学习现代C++,我一直在想。我知道我可以用Mersenne捻线器创建伪随机数,方法如下: std::random_device rnd; std::mt19937 gen(rnd()); std::uniform_real_distribution<> dist(0.,1.);,c++,random,C++,Random,这两个函数工作正常,但数字介于0之间。和1。如果没有具体原因,那就太好了 先谢谢你 应该采取以下措施: std::generate(v.begin(),v.end(), [] () { return 1.0*std::rand()/RAND_MAX;}); 查看它的工作状态。您不能直接使用std::generate中的分布,因为它的operator()需要参数。但是,您可以将生成器和分发捆绑在一个lambda中并使用它 #include <algorithm> #include &

这两个函数工作正常,但数字介于0之间。和1。如果没有具体原因,那就太好了


先谢谢你

应该采取以下措施:

std::generate(v.begin(),v.end(), [] () { return 1.0*std::rand()/RAND_MAX;});

查看它的工作状态。

您不能直接使用
std::generate
中的分布,因为它的
operator()
需要参数。但是,您可以将生成器和分发捆绑在一个lambda中并使用它

#include <algorithm>
#include <random>
#include <vector>

int main()
{
    std::random_device rnd;
    std::mt19937 gen(rnd());
    std::uniform_real_distribution<> dist(0.,1.);

    std::vector<double> data(20);

    std::generate(data.begin(), data.end(), [&gen, &dist]() { return dist(gen); });
}
#包括
#包括
#包括
int main()
{
std::随机_装置rnd;
标准:mt19937 gen(rnd());
标准:均匀实分布区(0,1);
std::矢量数据(20);
std::generate(data.begin(),data.end(),[&gen,&dist](){return dist(gen);});
}

对不起,我打错了。我不使用std::gen,我使用gen。对不起。我会编辑的,当然。谢谢你快速而精彩的回答。
#include <algorithm>
#include <random>
#include <vector>

int main()
{
    std::random_device rnd;
    std::mt19937 gen(rnd());
    std::uniform_real_distribution<> dist(0.,1.);

    std::vector<double> data(20);

    std::generate(data.begin(), data.end(), [&gen, &dist]() { return dist(gen); });
}