c++ - 生成0-1之间的随机数来填充容器

标签 c++ random

我最近开始学习现代 C++,我一直在想。我知道我可以通过 Mersenne Twister 创建伪随机数:

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

所以我找到了算法 std::generate(iterator, iterator, Generator) 所以,我的问题是。有没有办法用这种方法生成0到1之间的随机数并填充容器?

到目前为止,我发现如果我举个例子:

std::generate(v.begin(),v.end(),std::rand); // i know rand() is crap
std::generate(v.begin(),v.end(),gen);

这两个工作正常,但 0. 和 1. 之间的数字会非常好,没有具体原因。

提前谢谢您。

最佳答案

您不能直接在 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); });
}

关于c++ - 生成0-1之间的随机数来填充容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42682145/

相关文章:

c++ - 在C++11中初始化结构体数组

c++ - 在 “function name” 运算符后面键入参数 <T>

java - 在Java中生成字母数字随机字符串

c++ - "Peek ahead"检查对 getline(file,line) 的下一次调用是否会返回 false - 没有实际调用它,即不消耗该行

C++ 原子列表容器

java - 如何在每次运行 TimerTask 时更改 timer.schedule() 的周期?

c++ - 使用公共(public) PRNG 和统一分布 (C++17)

javascript - 在 JavaScript 中生成特定范围内的随机整数

Java随机数计数错误?

c++ - 从同一索引的两个不同数组中获取数据