推荐使用C++11的库生成随机数,示例:std::random_device rd; std::mt19937 gen(rd()); std::uniform_int_distribution dis(1, 100); 可确保高质量均匀分布,避免rand()的偏移问题,封装函数可提升效率。

在C++中生成随机数,推荐使用C++11引入的
标准库,它比传统的
rand()函数更灵活、更高质量。下面介绍几种常用方法和技巧。
使用std::random_device和随机引擎
要生成真正意义上的随机种子,可以使用
std::random_device,它通常用于初始化伪随机数生成器。 示例代码:
#include#include int main() { std::random_device rd; // 真实随机数种子 std::mt19937 gen(rd()); // 使用梅森旋转算法的生成器
std::uniform_int_distribution<> dis(1, 100); // 分布:1到100之间的整数 for (int i = 0; i < 5; ++i) { std::cout << dis(gen) << " "; } std::cout << std::endl; return 0;}
说明:
- std::random_device 提供非确定性随机数(如果系统支持)。
- std::mt19937 是常用的高性能伪随机数引擎。
- std::uniform_int_distribution 保证结果在指定范围内均匀分布。生成不同类型的随机数
根据需要选择合适的分布类型:
- 整数随机数:用
std::uniform_int_distribution<>- 浮点随机数:用
std::uniform_real_distribution<>- 正态分布:用
std::normal_distribution<>浮点示例:
立即学习“C++免费学习笔记(深入)”;
玖玖企业网站1001下载功能和特点文章、商品、图片管理支持中英文支持伪静态支持生成静态HTML 支持自定义标签支持自定义模板和在线编辑模板支持自定义广告和随机选取广告支持无限级分类及分类移动、合并、排序自动生成SEO信息专题管理二级管理员留言管理商品评论上传图片在线管理数据库备份恢复SQL防注入管理日志按Web标准设计兼容IE和Firefox后台管理路径后台管理登陆页面为/admin/login.asp默认账号:admi
std::uniform_real_distribution<> dis(0.0, 1.0); double random_value = dis(gen);避免常见错误
使用旧式
rand() % N会产生偏移,且质量差。应避免以下做法:
- 不要重复构造随机引擎或分布对象(影响性能)
- 不要每次用
time(nullptr)做种子(在同一秒内运行会得到相同序列)- 避免
rand()和srand(),它们不是类型安全的,且分布不均封装成可复用函数
可以将随机数生成封装为静态局部变量形式,提高效率:
int random_int(int min, int max) { static std::random_device rd; static std::mt19937 gen(rd()); std::uniform_int_distribution<> dis(min, max); return dis(gen); }这样每次调用只创建分布对象,引擎只初始化一次。
基本上就这些。C++标准库提供了强大而现代的随机数工具,合理使用能写出更可靠、更高效的代码。











