我已经用 libstdc++、libc++ 和 dinkumware 尝试过这个程序:
#include <iostream>
#include <algorithm>
#include <vector>
#include <random>
#include <functional>
#include <limits>
int main()
{
std::vector<int> v(10);
std::mt19937 rand{0};
std::uniform_int_distribution<> dist(
1, 10
);
std::generate_n(v.begin(), v.size(),
std::bind(dist, rand));
for (auto i : v)
std::cout << i << " ";
}
输出分别为:
6 6 8 9 7 9 6 9 5 7
6 1 4 4 8 10 4 6 3 5
5 10 4 1 4 10 8 4 8 4
每次运行的输出都是一致的,但正如您所看到的,它们是不同的。解释?
有no需要实施uniform_int_distribution<>
。 [rand.dist.general] 指定:
用于生成每个指定分布的算法是实现定义的。
[rand.dist.uni.int] 的所有内容是:
uniform_int_distribution 随机数分布产生随机整数i
, a <= i <= b
, 分散式
根据常数离散概率函数P(i | a, b) = 1/(b − a + 1)
.
每个实现都可以自由地按照自己的意愿实现此分布。您看到的显然是三种不同的实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)