c++ - 用 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);
}
这对我来说似乎不是很优雅,所以我想知道是否有更聪明的方法来做到这一点?
解决方案
你可以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
推荐阅读
- android - 卡在 Android Studio 中的“加载设备”上
- reactjs - 如何使用 SPFx Web 部件从 SharePoint Online 列表中获取非字符串数据?
- azure-data-factory - 将 Dataflows 时间列映射到 Sql 时间列
- c++ - 构造函数初始化列表中 std::array 的 NRVO
- javascript - 使用经典的 ASP / Javascript ADODB 将行从一个 MS Access 数据库表复制到网络服务器上的另一个
- javascript - 如何将此基于 ReactJS 类的组件转换为基于函数的组件?
- synology - 在 Synology NAS 中将硬盘更改为更大的硬盘后扩展分区
- c - 无论条件如何执行 if 语句
- postgresql - 如何对 Spring Data 底层查询进行一些更改
- python - 按下按钮后可以更改菜单栏文本吗?(Python,tkinter)