首页 > 解决方案 > 用 std::uniform_real_distribution 初始化一个 N 大小的 std::vector

问题描述

我有一个std::vector<double> x,我在编译时不知道谁的大小。假设向量的大小为N,我想为其分配N均匀分布的随机值。我目前在循环中执行此操作

std::default_random_engine generator;
std::uniform_real_distribution<double> distribution_pos(0.0,1.0);
for (auto it = x.begin(); it != x.end(); it++)
{
  *it = distribution_pos(generator);
}

这对我来说似乎不是很优雅,所以我想知道是否有更聪明的方法来做到这一点?

标签: c++randomstlstdvectoruniform-initialization

解决方案


你可以std::generate像下面这样使用:

// First create an instance of an engine.
random_device rnd_device;

// Specify the engine and distribution.
mt19937 mersenne_engine {rnd_device()};  // Generates random doubles
std::uniform_real_distribution<double> dist (0, 1.0);

auto gen = [&dist, &mersenne_engine](){
               return dist(mersenne_engine);
           };

std::vector<double> x(N);
std::generate(begin(x), end(x), gen);

See demo


推荐阅读