生成最多为1的随机数字列表

use*_*204 4 c++ random stl

是否有任何STL函数允许创建一个随机数加起来为1的向量?理想情况下,这将取决于向量的大小,因此我可以制作向量大小,例如23,此函数将使用0到1之间的随机数填充这23个元素,所有这些都加起来为1.

tem*_*def 5

一种选择是使用generate随机数填充矢量,然后使用accumulate总和值,最后将矢量中的所有值除以总和以将总和归一化为1.这显示在这里:

std::vector<double> vec(23);
std::generate(vec.begin(), vec.end(), /* some random source */);
const double total = std::accumulate(vec.begin(), vec.end(), 0.0);
for (double& value: vec) value /= total;
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!