如何在C++中设置均匀分布的参数?
How to set parameters of a uniform distribution in C++?
整数类型有k
不同的均匀分布。范围不一定相同,比如说我在 C++14 中使用dist1~U(0,10), dist2~U(0,5), etc.
uniform_int_distribution
类。这是我的代码:
#include <vector>
#include <random>
using namespace std;
int main() {
vector<int> distRange = {4,5,2,4};
vector< uniform_int_distribution<int> > U(distRange.size(),uniform_int_distribution<int>(0,1));
for (int i=0; i<distRange.size(); i++)
U[i].param( uniform_int_distribution<int>(0,distRange[i]).param() );
return 0;
}
如我们所见,我创建了一个新对象来更改参数。有没有更便宜的方法(键入次数或更少的运行时间)来做到这一点?
param_type
实例并不意味着要修改。该类型未提供 api。我认为它没有确切的类型,即它是定义的实现。因此,没有合法的方法来设置参数,其他使用所需的参数实例化它或获取另一个发行版的参数集的副本。
但是您可以使用所需的参数在向量中创建分布:
#include <vector>
#include <random>
using namespace std;
int main() {
vector<int> distRange = {4,5,2,4};
vector< uniform_int_distribution<int> > U;
for(auto&& max : distRange) {
U.emplace_back(0, max);
}
return 0;
}
Emplace将调用传递参数的构造器。因此,在每个循环中,通过使用已执行的 c'tor,直接使用您想要的参数创建uniform_int_distribution
,而不是编造一个虚假实例来稍后重置参数。
为了完整起见:如果你真的想走param_type
路,你可以跳过制作分发副本并构建一个临时的:
#include <vector>
#include <random>
using namespace std;
int main() {
vector<int> distRange = {4,5,2,4};
vector< uniform_int_distribution<int> > U(distRange.size());
for (int i=0; i<distRange.size(); i++)
U[i].param(uniform_int_distribution<int>::param_type(0,distRange[i]));
return 0;
}
这似乎是多余的,因为param_type
c'tor 保证镜像其发行版 c'tor,所以它只是引入了一个临时调用不同的 c'tor,旨在以相同的方式工作。这听起来很复杂,确实如此。
#include <vector>
#include <random>
using namespace std;
auto main()
-> int
{
using Distr = uniform_int_distribution<int>;
vector<Distr> u;
for( int const b : {4,5,2,4} )
{
u.emplace_back( 0, b );
}
}
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 如何在C++中设置均匀分布的参数?
- 带参数的累积正态分布函数的逆
- 为什么随机分布不将引擎作为模板参数?
- 我可以改变分布参数吗?
- 带参数的C/C++中的累积正态分布函数