C++11 新特性:更强大的随机数功能

随机数的重要性

随机数在计算机科学中扮演着重要的角色,它们的应用非常广泛,包括但不限于:

  1. 加密和安全性:在加密算法中生成随机密钥,以确保通信的安全。
  2. 模拟和建模:在科学研究和金融分析中,用随机数模拟复杂系统的行为或市场的波动。
  3. 游戏开发:生成随机事件或对象,增加游戏的可玩性和不可预测性。
  4. 软件测试:使用随机输入测试软件的健壮性和错误处理能力。

随机数的质量直接影响到这些应用的有效性和可靠性。

理想的随机数应该是不可预测和均匀分布的。

C++ 中的随机数实现

在 C++11 之前,生成随机数主要依赖于 C 语言标准库中的rand()函数,以及全局函数srand()用于设置随机数种子。

这种方法简单易用,但存在几个问题:

  • 生成的随机数质量不高,分布可能不均匀。
  • rand()在不同的编译器和平台上实现可能不同,导致随机数生成结果不一致。
  • 只能生成有限范围的随机数(通常是 0 到 RAND_MAX)。

C++11 的改进

C++11 标准引入了一个全新的随机数库,位于<random>头文件中,解决了之前随机数生成方法的诸多问题。

这个库提供了更多的随机数引擎(用于生成随机数序列)和分布(用于调整生成的随机数,以符合特定的概率分布),使得随机数生成更加灵活和高效。

随机数引擎

C++11 提供了多种随机数引擎,每种引擎都有其特点,如:

  • std::default_random_engine:默认的随机数引擎,平衡了速度和随机性。
  • std::mt19937:一个基于Mersenne Twister算法的引擎,提供高质量的随机数。
  • std::random_device:尝试使用非确定性随机数生成器,如果可用的话,可以提供真正的随机数。

分布

随机数库还提供了多种分布类,用于生成符合特定概率分布的随机数,如:

  • std::uniform_int_distribution:生成均匀分布的整数。
  • std::uniform_real_distribution:生成均匀分布的浮点数。
  • std::normal_distribution:生成符合正态分布的浮点数。

C++11 提供的分布还有伯努利分布、泊松分布、采样分布等,功能更多,使用起来也很简单,极大简化了随机数的生成和使用。

示例代码

下面的示例展示了如何在 C++11 中使用<random>库生成随机数:

#include <iostream>
#include <random>int main() {// 初始化随机数引擎std::mt19937 engine(std::random_device{}());// 定义分布std::uniform_int_distribution<int> dist(1, 6); // 模拟掷骰子// 生成随机数for (int i = 0; i < 10; ++i) {std::cout << dist(engine) << " ";}std::cout << std::endl;return 0;
}

输出:

2 1 5 4 4 5 1 3 2 6 

总结

C++11 中引入的随机数库大大增强了随机数生成的能力和灵活性,解决了 C++11 之前依赖rand()的种种问题。

使用 C++11 提供的多种随机数引擎和分布,开发者可以根据具体需要,生成高质量的随机数,满足加密、模拟、游戏开发等多种场景的需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/812503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NVIC中断分组和配置

NVIC中断分组合配置 NVIC是啥&#xff1f; NVIC是啥&#xff1f; NVIC 的全称是 Nested vectored interrupt controller&#xff0c;即嵌套向量中断控制器。 对于 M3/M4/M7 内核的 MCU&#xff0c;每个中断的优先级都是用寄存器中的 8 位来设置的。8 位的话就可 以设置 2^8 2…

syscall的检测与绕过

普通调用 #include <iostream> #include <windows.h>int main() {unsigned char shellcode[] "";void* exec VirtualAlloc(0, sizeof shellcode, MEM_COMMIT,PAGE_EXECUTE_READWRITE);memcpy(exec, shellcode, sizeof shellcode);CreateThread(NULL, …

mybaits(8)-缓存机制

缓存机制 1、mybatis缓存2、一级缓存2.1 开启一级缓存2.2 一级缓存失效 3、二级缓存3.1 开启二级缓存3.2 二级缓存什么时候失效3.3 二级缓存的相关配置 4、MyBatis集成EhCache 1、mybatis缓存 缓存&#xff1a;cache 缓存的作用&#xff1a;通过减少IO的方式&#xff0c;来提高…

vue不正经指南

vue不正经指南 环境配置 asdf plugin add nodejs asdf install nodejs 16.20.2创建项目 npm create vitelatest my-vue-app -- --template vue npm install npm run dev修改调试端口 修改vite.config.js,修改如下所示&#xff0c;添加server的host和port。 import { defi…

Spring源码复习之AnnotatedBeanDefinitionReader

文章目录 一、简单描述二、源码分析三、最佳实践一、简单描述 AnnotatedBeanDefinitionReader是一个用于读取和解析带有注解的Bean定义的类,它主要用于基于注解的配置方式,允许开发者将Java类标记为Spring组件,从而让Spring容器自动扫描和注册这些组件,而不需要显式配置这…

macOS idea配置mysql

一、首先查看mysql是否配置好&#xff1a; 打开终端输入&#xff1a;mysql -u root -p&#xff1b;&#xff0c;如果是没有成功&#xff0c;则进行配置&#xff0c;配置过程如下&#xff1a; 1、输入&#xff1a;vim ~/.bash_profile 2、 输入 “i” 进入 insert 模式&#…

2024妈妈杯mathorcup数学建模C题 物流网络分拣中心货量预测及人员排班

一、数据预处理 数据清洗是指对数据进行清洗和整理&#xff0c;包括删除无效数据、缺失值填充、异常值检测和处理等。数据转换是指对数据进行转换和变换&#xff0c;包括数据缩放、数据归一化、数据标准化等。数据整理是指对数据进行整理和归纳&#xff0c;包括数据分组、数据聚…

面向对象的架构三段式写一篇论文

在面向对象的软件架构中&#xff0c;系统设计通常遵循一种“三段式”方法论&#xff0c;以确保软件的可扩展性、可维护性和灵活性。这种方法论包括三个核心阶段&#xff1a;概念化、详细设计和实现。通过这三个阶段的逐步深入&#xff0c;开发团队可以有效地应对复杂系统的挑战…

PDF转TXT ChatGPT编程

1.目的 在Z-library找到一本书&#xff0c;只不过是PDF格式的&#xff0c;看的时候体验不好&#xff0c;还没有办法保存记录&#xff0c;就想着能不能转成txt格式放到手机自带的小说软件中看。 不想去网上找相关的软件&#xff0c;可以还需要付钱&#xff0c;所以尝试用ChatGP…

springcloud-fegin 组件调用

一、Feign 概述 Feign是Netflix开发的声明式、模板化的HTTP客户端&#xff0c; Feign可以帮助我们更快捷、优雅地调用HTTP API。 在Spring Cloud中&#xff0c;使用Feign非常简单——创建一个接口&#xff0c;并在接口上添加一些注解&#xff0c;代码就完成了。Feign支持多种…

R: 支持向量机(Support Vector Machine,简称SVM)

在数据科学和机器学习领域中&#xff0c;支持向量机&#xff08;Support Vector Machine&#xff0c;简称SVM&#xff09;是一种强大的监督学习算法&#xff0c;常用于分类和回归分析。它的优点之一是可以适用于复杂的数据集&#xff0c;并且在高维空间中表现良好。在本文中&am…

【示例】MySQL-MySQL中常见的锁

前言 本文主要讲述MySQL中常见的锁。 总结 | 各类别锁的名字 锁级别锁名字解释全局锁read lock全局锁只有可读锁表级锁 - 表锁read lock 表共享读锁write lock 表独占写锁表级锁 - 元数据锁&#xff08;meta data lock&#xff0c;MDL&#xff09;SHARED_READ_ONLYSHARED_NO…

OSPF实验

需求&#xff1a; 1、R1-R3为区域0&#xff0c;R3到R4为区域1&#xff1b;其中R3的环回也在区域0&#xff0c;P1-R3分别有一个环回接口 2、R1-R3 R3为DR设备&#xff0c;没有BDR 3、R4环回地址已固定&#xff0c;其他所有网段使用192.168.1.0/24进行合理分配 4、R4环回不能…

【golang】动态生成微信小程序二维码实战下:golang 生成 小程序二维码图片 并通过s3协议上传到对象存储桶 | 腾讯云 cos

项目背景 在自研的系统&#xff0c;需要实现类似草料二维码的功能 将我们自己的小程序&#xff0c;通过代码生成相想要的小程序二维码 代码已经上传到 Github 需要的朋友可以自取 https://github.com/ctra-wang/wechat-mini-qrcode 一、生成Qrcode并提交到对象存储 通过源生A…

Kubernetes(k8s):深入理解 Kubernetes 中的污点(Taints)与容忍度(Tolerations)

Kubernetes&#xff08;k8s&#xff09;&#xff1a;深入理解 Kubernetes 中的污点&#xff08;Taints&#xff09;与容忍度&#xff08;Tolerations&#xff09; 1、污点&#xff08;Taints&#xff09;2、容忍度&#xff08;Tolerations&#xff09;3、示例演示-测试污点的具…

【C/C++基础知识】const 关键字

文章目录 Q&A and 前言const 修饰基本变量初始化const 对象仅在文件内有效 const 的引用应用 指针与 constconst 修饰类成员函数参考写在最后 Q&A and 前言 Q&#xff1a;简要说一说 C 中的 const 关键字&#xff0c;含义以及常见的使用位置 A&#xff1a;const 是 C…

自动化测试(selenium篇)

这次我们来介绍selenium 我们主要来讲解这几个要点 1.什么是自动化测试 2.什么是selenium 3.为什么来讲selenium 4.selenium的环境搭建 5.selenium的 API 1.什么是自动化测试 自动化测试指软件测试的自动化&#xff0c;在预设状态下运行应用程序或者系统&#xff0c;预设条…

蓝宝石衬底材料具有广阔消费市场 行业景气度良好

蓝宝石衬底材料具有广阔消费市场 行业景气度良好 衬底是由半导体单晶材料制造而成的晶圆片&#xff0c;既可以直接进入晶圆制造环节生产半导体器件&#xff0c;也可以进行外延工艺加工生产外延片&#xff0c;是电子元件的主体结构和支撑载体。蓝宝石衬底材料具有良好的透光性、…

burpsuite最新版2024.3.1安装

burpsuite最新版安装 环境 windows jdk22 BurpLoaderKeygen.jar burpsuite profression 2024.3.1 链接 链接&#xff1a;https://pan.baidu.com/s/1N6nggZZezg8y1FHpgwJmeg 提取码&#xff1a;n6uqjdk以及破戒方式这里不做介绍 注意事项 使用BurpLoaderKeygen.jar 破解之后…

Windows 2003 R2与Windows 2022建立域信任报错:本地安全机构无法跟域控制器获得RPC连接。请检查名称是否可以解析,服务器是否可用。

在Windows Server 2003 R2与Windows Server 2022之间建立域信任时遇到“本地安全机构无法与域控制器获得RPC连接”的错误&#xff0c;可能是由于以下几种原因&#xff1a; DNS 解析问题&#xff1a; 确保源域和目标域的DNS配置正确&#xff0c;能够互相解析对方的域名和IP地址。…