【发布时间】:2015-10-01 01:51:00
【问题描述】:
< random >中有uniform_int_distribution 当我创建它时,我定义了一个间隔。 我可以在创建后更改此间隔吗?
例如
std::uniform_int_distribution distr(0, 10);
// can I change an interval here ?
【问题讨论】:
< random >中有uniform_int_distribution 当我创建它时,我定义了一个间隔。 我可以在创建后更改此间隔吗?
例如
std::uniform_int_distribution distr(0, 10);
// can I change an interval here ?
【问题讨论】:
只需为变量分配一个新分布:
std::uniform_int_distribution<int> distr(0, 10);
distr = std::uniform_int_distribution<int>(5, 13);
或者,为此创建一个参数(@awesomeyi 回答需要创建分发对象,这仍然需要创建 param_type 对象)
std::uniform_int_distribution<int> distr(0, 10);
distr.param(std::uniform_int_distribution<int>::param_type(5, 13));
证明 param_type 可以工作(对于@stefan):
P 是相关的 param_type。它应满足 CopyConstructible、CopyAssignable 和 EqualityComparable 要求。它还具有采用相同参数的构造函数 与 D 的构造函数相同的类型并具有成员函数 与 D 的参数返回 getter 相同
http://en.cppreference.com/w/cpp/concept/RandomNumberDistribution
【讨论】:
param_type 是否保证构造函数采用两个值?我在 cppreference.com 上找不到任何东西
param_type 声明看到它。
param_type 是typedef unspecified param_type。这表明,这样的构造函数不能保证。
您可以通过param()功能。
std::uniform_int_distribution<int> distr(0, 10);
std::uniform_int_distribution<int>::param_type d2(2, 10);
distr.param(d2);
【讨论】: