Use param()
:
using param_t = std::uniform_int_distribution<>::param_type;
group.dis.param(param_t(0, 19));
If the parameters change every time you use the distribution, then you can also consider using the two-parameter overload of operator()
instead:
std::cout << group.dis(gen, param_t(0, 19)) << ' ';
As distribution objects are allowed to store extra bits of entropy obtained during a previous operator()
call, this approach can be more efficient than constructing a new distribution object and assigning it.
Note that the cppreference page is incomplete and doesn't document the requirements the standard imposes on param_type
. Given a distribution type D
and its associated param_type
P
,
For each of the constructors of D
taking arguments corresponding to
parameters of the distribution, P
shall have a corresponding
constructor subject to the same requirements and taking arguments
identical in number, type, and default values. Moreover, for each of
the member functions of D
that return values corresponding to
parameters of the distribution, P
shall have a corresponding member
function with the identical name, type, and semantics.
(§26.5.1.6 [rand.req.dist]/p9)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…