C++ 关于使用URBG实现std::shuffle的一个问题

C++ 关于使用URBG实现std::shuffle的一个问题,c++,random,shuffle,C++,Random,Shuffle,参考中概述的第三版std::shuffle模板的(可能)实现 根据以下提供的distr\u t::param\u type说明: 给定 P、 由D::param_type命名的类型 d、 类型d的值 p、 类型为p的(可能为常数)值 g、 满足UniformRandomBitGenerator的类型的g1,g2,左值 以下表达式必须有效并具有指定的效果: d(g,p)连续调用 具有相同g的调用根据 p参数化分布 因为在上述调用中: swap(first[i], first[D(g, para

参考中概述的第三版
std::shuffle
模板的(可能)实现

根据以下提供的
distr\u t::param\u type
说明:

给定

  • P、 由D::param_type命名的类型
  • d、 类型d的值
  • p、 类型为p的(可能为常数)值
  • g、 满足UniformRandomBitGenerator的类型的g1,g2,左值
以下表达式必须有效并具有指定的效果:

d(g,p)连续调用 具有相同g的调用根据 p参数化分布

因为在上述调用中:

swap(first[i], first[D(g, param_t(0, i))]);
param_t(0,i)
参数化的分布始终在所需的分布范围内,调用
g
也应在分布范围内生成随机结果类型(int)


这种理解正确吗?

也许学习是第一步。我不知道你在问什么
g
只是随机位生成器。调用
D(g,param_t(0,i))
会产生一个介于0和
i
之间的随机数。是的,这个例子是做一个shufflePerhaps学习将是第一步。我不确定你在问什么
g
只是随机位生成器。调用
D(g,param_t(0,i))
会产生一个介于0和
i
之间的随机数。是的,示例是执行随机洗牌
swap(first[i], first[D(g, param_t(0, i))]);
swap(first[i], first[D(g, param_t(0, i))]);