- 博客(186)
- 资源 (12)
- 收藏
- 关注
原创 大端序、小端序和网络字节序精讲
字节序(Endianness)是数据在计算机内存中存储的顺序方式。计算机将数据按字节(8位)进行存储,不同的系统可能会有不同的字节存储顺序。大端序:高位字节在低地址,易于人类阅读。小端序:低位字节在低地址,x86 等主流平台使用。网络字节序:统一使用大端序,确保数据在网络中的正确传输。视频链接:关注微信公众号程序员陈子青解锁你的高薪offer之旅。
2025-04-04 20:11:01
275
原创 C/C++ sizeof 与 strlen 的区别教程
sizeof 看类型、编译期, strlen 看内容、运行期; 数组和指针要分清, 字节字符莫混淆!
2025-04-04 18:36:46
179
原创 空类有那些默认的成员函数
空类默认有 6 个特殊函数(构造、析构、拷贝/移动构造、拷贝/移动赋值),除非你显示禁用或重写,否则编译器会默认生成它们。
2025-04-02 19:56:52
201
原创 C++ 动态库与静态库精讲
C++ 程序编译过程分为三步:预处理 ➞ 编译 ➞ 链接链接的目的:将多个目标文件 (.o)和库文件合成最终的可执行文件链接分为两种:【静态链接】 和 【动态链接】项目静态链接动态链接可执行体积大小运行效率高略低库依赖无外部依赖需外部 .so/.dll升级维护需重新编译可单独更新共享性差(每个程序一份)好(多程序共用)
2025-03-29 23:47:42
311
原创 C++内存分区详解
C++ 程序在运行时,内容通常被分为五大区域,也可以简化理解为四个分区(代码、全局、堆、栈),但更严谨地说应理解为五个分区(代码、全局、常量、堆、栈)
2025-03-28 23:45:27
391
原创 C++ 自动类型推断:auto & decltype详解
本文对 auto 关键字的作用与使用场景,decltype 关键字的特性及用法以及如何在 C++ 开发中高效使用类型推断进行了详细介绍
2025-03-24 17:40:00
321
原创 C++ 类型转换及 UB(未定义行为)
本文对C++ 中的四种类型转换运算符(static_cast、dynamic_cast、const_cast、reinterpret_cast)及其正确使用场景进行了详细介绍。
2025-03-24 17:25:03
370
原创 C++ 关键字 extern 与 inline详解
本文对C++ 关键字 extern 与 inline 进行了详细解释,包括它们的作用以及使用场景。
2025-03-24 17:18:28
301
原创 C++ 完美转发(forward)详解
在 C++11 之前,泛型函数在传递参数时无法保持参数的原始类型(左值或右值),导致额外的拷贝或移动操作。完美转发(Perfect Forwarding)是一种 高效传递参数的技术,能够 保持参数的原始特性,避免额外的性能开销。
2025-03-24 17:00:03
607
原创 extern C 详解
是 C++ 和 C 语言混合编程的关键工具,使两种语言可以互相调用,提高代码的可扩展性和兼容性。确保头文件可在 C 和 C++ 两端兼容。,所以编译器会在编译时修改函数名,加入参数类型信息。,不能嵌套到局部变量或函数内部。,但 C++ 端定义函数时必须加。是 C++ 提供的关键字,用于。,其函数名在编译后不会被修饰。,这样 C 语言才能正常链接。解锁你的高薪offer之旅。C 语言不能直接识别。(C 语言不支持重载)(C 语言不支持类)
2025-03-24 16:32:42
879
原创 C++ inline 失效场景
inline 关键字用于提示编译器内联展开函数,以减少调用开销,但最终由编译器决定是否展开。适用于小型、简单、频繁调用的函数,如 getter/setter。然而,在某些情况下,inline 可能失效,包括:递归函数(调用次数未知)、函数体过大(代码膨胀影响性能)、复杂控制流(循环、条件判断影响优化)、虚函数(动态绑定无法在编译期确定目标函数)、函数指针调用(无法静态确定目标函数)、取函数地址(需保留函数实体)以及动态库中的 inline(共享库函数地址运行时确定)。
2025-03-24 16:18:33
314
原创 C++中class大小的决定因素详解
C++中类的大小由多个因素共同决定。非静态成员变量的大小直接影响类的大小,按类型大小累计;内存对齐规则可能导致填充字节的添加,以满足对齐要求,从而增加类的大小。如果类包含虚函数,则会引入虚函数表指针(vptr),通常增加8字节(64位系统)的开销。虚继承则会引入虚基类指针(vbptr),进一步增加内存占用。即使是空类,其大小也至少为1字节,以确保每个对象都有唯一的内存地址。理解这些因素有助于优化类的内存布局,避免不必要的空间浪费,是C++性能调优和内存管理中的重要知识点。
2025-03-24 16:07:32
395
原创 虚函数表(vtable)底层原理与内存布局
虚函数表(vtable)是C++实现运行时多态的核心机制。每个含有虚函数的类都会生成一个vtable,存储虚函数地址,对象通过vptr(虚表指针)访问vtable。单继承时,对象只有一个vptr;多重继承时,对象有多个vptr,分别指向不同基类的vtable;虚继承则引入虚基表(vbptr),解决菱形继承中的基类重复问题。
2025-03-24 15:57:32
410
原创 C++内存泄漏有哪些?举例说明。如果一个类既不继承也不是子类,内部也没有虚函数,那他的析构函数需要声明为虚函数吗? 为什么?
C++,C++内存泄露类型,虚函数
2025-03-24 15:39:43
695
原创 配置 Visual studio 2022 Connector C++ 8.0环境 连接MySQL
(1) 在Mysql的安装路径中找到例如 : C:\Program Files\MySQL\Connector C++ 8.0\include\jdbc(2) 打开VS2022,创建控制台空项目,右键项目属性->C/C++->附加头文件 中添加 C:\Program Files\MySQL\Connector C++ 8.0\include\jdbc 地址。
2024-10-11 23:28:45
1570
3
原创 详解 ROS 近似时间戳同步 ApproximateTime
message_filters::sync_policies::ApproximateTime 策略使用自适应算法根据时间戳来匹配多个Topic消息。ApproximateTime根据时间戳来进行匹配,因此Topic的消息类型必须包含Header字段【C++】。以下补充属性以同步两个Topic为例,ApproximateTime至少会保证其中一个Topic中的消息不会被丢失。另一个Topic的消息可能会被丢失。匹配完全按照Header字段中的stamp时间戳进行同步,和消息到来的时间顺序无关。
2024-04-28 18:31:25
2757
原创 应届生岗位直达服务
详情请私信了解技术面试:C++技术深入学习资源礼包(岗位技术栈查漏补缺/非卖品)系统设计面试的准备模拟技术面试和问题纠错反馈职业发展和软技能:简历优化和面试技巧职业规划和目标设定沟通和团队协作技能实际项目经验:实际项目开发经验的分享参与开源项目的机会实习和工作机会的推荐简历优化:确保简历简洁明了,突出技能和成就。使用具体的项目数据和成果来支持你的经历。适应每个职位的要求,定制简历以突出与岗位相关的经验和技能。全程面试模拟面试准备:
2024-03-18 14:51:21
436
原创 C++11 bind function forward 用法详解
它的主要作用是在函数模板中将传入的参数按照它们的值类别(左值或右值)进行转发,以保持它们的值类别不变,从而避免不必要的拷贝和移动操作。在转发的过程中,如果参数是左值引用类型,那么转发后的类型也是左值引用类型。如果参数是右值引用类型,那么转发后的类型也是右值引用类型。它的作用是将一个可调用对象(比如函数、函数指针、成员函数、成员函数指针等等)以及若干个参数绑定到一个新的函数对象上,形成一个新的可调用对象。返回一个新的函数对象,这个函数对象可以被调用,调用时会执行绑定后的可调用对象,并将绑定的参数传递给它。
2023-08-01 13:51:25
1134
原创 C++设计模式-知识回顾总结
抽象工厂模式适用于比较复杂的多变的业务场景,总体上就是给一系列功能相同但是属性会发生变化的组件添加一个抽象类,这样就可以非常方便地进行后续的拓展,再搭配工厂类就可以创建出我们需要的对象了。简单来说:将一个类的接口转换成用户希望的另一个接口,使不兼容的对象能够相互配合并一起工作,这种模式就叫适配器模式。在使用一个已有的类时,发现它的接口与需求不符合,可以使用适配器模式将其接口转换成客户端所期望的接口。源接口(Adaptee):需要被适配的接口,即原本不符合客户端需要的接口。
2023-07-06 15:07:13
787
原创 Windows搭建C++开发环境(visual studio 2022)
此时就可以在在此文件中,安安静静地编写你的C++代码了。此时屏幕上打印出 Hello World ,运行成功!点击源文件,鼠标右键选择添加->新建项。安装完成后会自动打开出现以下界面。点击绿色的三角符号运行该程序。下载完成后打开 步骤如下。选择空项目,点击创建。
2023-05-06 11:08:08
3956
1
原创 FPS游戏实战数据集|yolov8训练模型导出|C/C++项目|驱动鼠标模拟人工|加密狗USB硬件虚拟化
本文介绍了如何使用YOLO识别游戏人物。通过收集数据集、标注数据、训练模型和部署模型等步骤,可以快速准确地识别游戏场景中的人物。在实际应用中,需要根据游戏场景和需求进行调整和优化,以达到最佳的识别效果。
2023-03-24 16:14:41
4500
6
原创 Easy Deep Learning——加载数据集
PyTorch是一个广泛使用的深度学习框架,它提供了许多方便的函数和工具,用于加载和处理各种数据集。在本文中,我们将介绍PyTorch中加载数据集的步骤。
2023-03-17 13:50:48
1243
原创 Easy Deep Learning——全连接层
我们还是回到之前的草地场景中,假设现在的问题变成让机器判断该草地上是不是有一只猫存在,由于之前做的卷积操作,将草地分成了许多网格,如果场地上只有一只猫,那么只有一个网格是有猫的,而其他的网格都不存在猫,一个卷积核运算可以得到一个特征,如果按比例计算,显然存在猫的网格只有一个,大部分都是不存在的场景,那机器根据概率判断大概率会认定该草地上没有猫,这是不符合结果的。全连接层是这样做的好,那么接下来再用比较通俗的语言来总结,可以这样解释。
2023-03-10 14:34:42
863
原创 Easy Deep Learning——池化层
同时,由于池化操作的缩小特征图的空间大小,因此在池化操作之前,可以通过增加卷积层的数量或通道数来提高模型的表达能力,从而保持对目标的识别能力。池化(Pooling)是卷积神经网络中的一种常用操作,其目的是通过减小特征图的空间大小来降低模型的复杂度。在池化操作中,我们将特征图划分为多个子区域,然后对每个子区域进行聚合操作,生成一个较小的特征图。通常,池化操作的聚合操作可以是取最大值(Max Pooling)、取平均值(Average Pooling)等,其中最大值池化是最常用的一种。以下是python代码。
2023-03-10 11:26:02
762
原创 Easy Deep Learning——激活函数
ReLU(Rectified Linear Unit):是目前使用最广泛的激活函数之一,它将小于零的值设为零,大于零的值不变。可以通过来使用。Sigmoid:将实数映射到区间 (0,1) 内,对于二分类问题非常有用。可以通过来使用。Tanh:将实数映射到区间 (-1,1) 内,比 Sigmoid 函数的输出范围更广。可以通过来使用。Softmax:主要用于多分类问题,将实数映射到 (0,1) 区间内的概率值,且所有输出的概率和为1。可以通过来使用。以下使用pytorch的API 来实现这四种函数。
2023-03-10 11:01:23
568
原创 Easy Deep Learning——卷积层
由于卷积核尺寸可以远远小于输入尺寸,即减少需要学习的参数的数量,并且针对每个卷积层可以使用多个卷积核获取输入的特征映射,对数据(尤其是图像)具有很强的特征提取和表示能力,并且在卷积运算之后,使得卷积神经网络结构对输入的图像具有平移不变的性质。下面使用一张图像来展示经过卷积后,输出的特征映射的结果。在PyTorch中针对卷积操作的对象和使用的场景不同,有一维卷积、二维卷积三维卷积与转置卷积(可以简单理解为卷积操作的逆操作),但它们的使用方法比较相似,都可以从torch.nn模块中调用,需要调用的类如表所示。
2023-03-09 19:06:58
2410
2
原创 Easy Deep Learning——PyTorch中的自动微分
为什么选择这一章作为第一章而不是介绍深度学习的核心数据结构张量呢?原因在于张量运算实际就是矩阵的运算,另外PyTorch关于张量的数据处理函数很多,没必要逐个介绍,用到的时候去查文档即可,介绍过多张量的计算方式其实并无意义。在入门深度学习时,我相信初学者最关心的是什么是深度学习?它的基本原理是怎么样的,而不是上来就列一大堆代数式,然后去进行各种了数据计算。
2023-03-09 17:42:25
1327
1
原创 常用的深度学习优化方式
L2正则化通过对模型的权重向量的平方进行惩罚,鼓励模型使用所有的特征,但使权重向量中的值不会过大。全连接层的作用是将输入数据进行线性变换,并将其映射到一个新的空间中,从而得到更高层次的特征表示。总之,全连接层是神经网络中最基本的一种层,它可以将输入数据进行线性变换并将其映射到一个新的空间中。在深度学习中,我们通常将多个全连接层组合起来构成一个神经网络,从而得到更高层次的特征表示。全连接层将输入数据的每个元素与该层中的每个神经元相连接,输出结果是输入数据与该层的权重矩阵相乘,并加上该层的偏置向量。
2023-03-08 17:04:20
1188
转载 激活函数与Loss的梯度
因为:z0时,梯度是1。因为在向后传播时候,因为梯度是1,所以对于搜索最优解,梯度计算时候非常方便,也不会被放大和缩小,很难出现梯度弥散和梯度爆炸的情况。b)sigmoid的缺点:因为sigmoid函数在处于+∞和-∞时候,导数趋近于0,会使得数据处于更新非常缓慢(长时间loss保持不变的情况),即:梯度弥散问题。函数的自变量的方向,函数的自变量越多,偏微分就越多。有的快,有的准确率高。2)所有概率之和等于1。不断更新自变量,当偏导(梯度)趋近于0的时候,函数值也就趋近于极小值。
2023-03-06 18:17:57
686
原创 详解PyTorch Tensor 数据类型——张量
在PyTorch中,视频可以被表示为一个5维的张量,其中第0维表示批次数,第1维表示帧数,第2维表示通道数,第3维表示高度,第4维表示宽度。在PyTorch中,图片可以被表示为一个4维的张量,其中第0维表示批次数,第1维表示通道数,第2维表示高度,第3维表示宽度。例如,一个形状为(1, 3, 224, 224)的张量可以表示一张RGB格式的224x224的图片。总之,不同类型的数据在计算机中都有自己的存储方式和编码方式,而在PyTorch中,这些数据都可以被表示为张量,并且可以方便地进行各种张量操作。
2023-03-06 02:25:37
5261
原创 C++17 文件与目录操作 <filesystem>
头文件提供了一组强大的工具来处理文件系统。你可以使用它来管理文件和目录,获取文件和目录的信息,以及执行文件操作。这些功能使得处理文件和目录变得更加容易,而且可移植性更好,因为头文件可以在多个平台上使用。
2023-03-03 16:54:53
8982
5
原创 详解Linux下的环境变量以及C++库文件和头文件、python库的配置
我们都习惯在Windows 上配置环境变量,例如 Windows设置系统环境变量即在path中添加配置路径即可;使用VS则在项目设置中配置库文件和头文件路径;使用vscode 则常用cmake编译,编写CMakeLists.txt 链接库文件或头文件即可。而在Linux 环境中,则需要记住一些常用命令和常量值,在此总结如下,以供参考。
2023-03-03 00:54:36
2814
原创 详解ROS时间戳
ROS(Robot Operating System)是一个用于机器人开发的开源软件框架,其中涉及到了一些与时间相关的概念和工具,如时间戳、计时器等。本文将主要介绍ROS中时间戳的概念和应用,并提供一个Python代码案例演示如何处理ROS时间戳。
2023-02-27 13:32:02
9917
原创 Python日志模块logging基本用法
例如,你可以将INFO级别的日志写入磁盘文件,将WARNING级别的日志输出到控制台,将ERROR级别的日志发送到Email。你可以将日志输出到不同的地方,实现日志的分级和分模块管理。它会在一定的时间间隔后自动将日志内容写入新的日志文件,以便更好地管理日志文件大小和数量。Formatter:Formatter定义了日志输出的格式,可以定义日期格式、日志级别、日志信息等内容。你可以根据不同的过滤条件来实现日志的过滤。文件中,如果文件大小超过了指定的大小,将会自动创建一个新的日志文件,最多保留7个日志文件。
2023-02-21 02:55:58
636
1
C++ Hook DirectX 11的内部Imgui绘制的框架封装C++ Hook DirectX 11的内部Imgui绘制的
2022-10-07
C++ 面向对象实现的雷霆战机游戏,带音乐 ,主角带动态特效。完整源码 EasyX
2022-07-28
MFC 标签页 TabSheet.h TabSheet.cpp
2022-07-19
Inject.exe
2020-11-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人