我最近开始学习现代 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/