C++中推荐使用生成随机数。首先初始化随机设备和梅森旋转引擎,再定义分布范围,如1~100的整数或0.0~1.0的浮点数,最后通过引擎生成高质量随机数,避免rand()的偏差问题。
<img src="https://img.php.cn/upload/article/001/431/639/176249472264862.png" alt="c++ 如何生成随机数_c++ 随机数生成 rand 与 用法”>
在 C++ 中生成随机数,主要有两种方式:使用传统的 rand() 函数和现代的 头文件。前者简单但存在局限性,后者更灵活、更安全,推荐在新项目中使用。
使用 rand() 生成随机数
rand() 来自 头文件,用于生成 0 到 RAND_MAX 之间的伪随机整数(通常为 32767)。
为了获得不同的随机序列,需要配合 srand() 设置种子,一般用当前时间作为种子。
包含头文件:#include 和 #include 调用 srand(time(0)) 初始化随机种子 调用 rand() 获取随机数
示例代码:
立即学习“C++免费学习笔记(深入)”;
#include iostream>
#include
#include
int main() {
srand(time(0)); // 设置种子
int random_num = rand(); // 生成随机数
std::cout
// 生成 1~100 之间的随机数
int range_random = rand() % 100 + 1;
std::cout
return 0;
}
注意: rand() % N 会产生分布偏差,尤其当 N 接近 RAND_MAX 时。而且 rand() 的随机质量不高,不适用于对随机性要求高的场景。
使用 生成高质量随机数
C++11 引入了 头文件,提供更强大、更均匀的随机数生成机制。它由两部分组成:引擎(如 std::mt19937)和分布(如 std::uniform_int_distribution)。
引擎负责生成底层随机比特流,常用的是梅森旋转算法 std::mt19937 分布控制随机数的范围和分布类型(均匀、正态等)
示例:生成 1~100 的随机整数
#include stream>
#include
int main() {
// 创建随机数引擎,使用随机种子
std::random_device rd; // 真实随机设备,用于种子
std::mt19937 gen(rd()); // 梅森旋转引擎
// 定义分布:1 到 100 的均匀整数分布
std::uniform_int_distribution dis(1, 100);
// 生成随机数
int random_num = dis(gen);
std::cout
return 0;
}
如果不需要高安全性,也可以用 time(0) 做种子:
std::mt19937 gen(static_cast(time(0)));
常见应用场景与建议
对于浮点随机数,可使用 std::uniform_real_distribution:
std::uniform_real_distribution dis(0.0, 1.0);
建议:
避免重复创建引擎和分布对象,可将其定义为静态或类成员 在多线程环境中,每个线程应使用独立的随机引擎实例 优先使用 而非 rand(),尤其在模拟、游戏、密码学相关场景
基本上就这些。C++ 的 提供了更现代、更可靠的随机数支持,虽然写法稍复杂,但值得投入。
以上就是C++ 如何生成随机数_C++ 随机数生成 rand 与 用法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1482895.html
微信扫一扫
支付宝扫一扫