您寻求一种在指定范围[min, max]内均匀生成随机数的方法。
rand 的缺陷
您当前使用 rand() 和模运算符的实现可能无法确保均匀分布,因为它的行为取决于 RAND_MAX 和范围本身。
C 11 和统一范围生成
在 C 11 中,std::uniform_int_distribution 提供了针对此需求量身定制的解决方案:
#includestd::uniform_int_distribution distr(min, max); std::random_device rand_dev; std::mt19937 generator(rand_dev()); int random_number = distr(generator);
Container洗牌
要洗牌容器,请使用 std::shuffle:
#include#include std::vector vec = {4, 8, 15, 16, 23, 42}; std::random_device random_dev; std::mt19937 generator(random_dev()); std::shuffle(vec.begin(), vec.end(), generator);
Boost.Random
如果使用 C 11 编译器不可行,考虑 Boost.Random,它具有与 C 11 对应项类似的接口。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3