自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 收藏
  • 关注

原创 【C++】编写通用模板代码的重要技巧:T()

文章摘要:该代码展示了vector类中resize()方法的实现,重点解析了参数const T& val=T()的设计原理。这一设计通过值初始化(T())为任意类型提供默认值,使用常量引用避免拷贝,并支持调用者自定义值。这种模式保证了代码的通用性(适用于int/string/自定义类等)、效率(引用传参)和类型安全,是STL中处理模板类参数的典型做法。默认参数机制允许在未指定值时自动使用类型对应的"零值"初始化新元素。

2025-09-02 22:50:41 250

原创 【C++】深入解析C++嵌套依赖类型与typename关键字

本文介绍了C++中的嵌套依赖类型(NestedDependentType)及其typename关键字的使用。嵌套依赖类型指依赖于模板参数的嵌套类型,如Container<T>::iterator。由于编译器无法在实例化前确定依赖名称的性质,需要用typename明确指示其为类型。文章详细说明了必须使用typename的多种场景(函数返回/参数类型、成员变量声明等)以及不需要的情况(非依赖类型、基类列表等),并通过代码示例演示了实际应用。理解这些规则有助于正确编写模板代码,避免编译错误。

2025-09-02 22:46:03 427

原创 【C++】函数模板与类模板的使用与机制解析

本文介绍了泛型编程中的模板技术。文章详细讲解了模板的定义格式、实例化过程、匹配原则,并提供了函数模板和类模板的实现示例。

2025-09-01 16:30:17 508

原创 【C++】内存管理机制:从new到delete全解析

C++在保留C语言内存管理方式的基础上,引入了更安全高效的new/delete机制。相比C语言方式,new/delete优势在于:符合面向对象思想(定义即初始化)、代码更简洁、更安全。

2025-09-01 16:00:09 1065

原创 【C++】友元机制详解:突破封装的秘密武器

本文主要介绍友元与内部类的机制与使用,友元机制突破封装限制,允许函数或类访问其他类的私有成员,包括友元函数和友元类。内部类是定义在类内部的独立类,自动成为外部类的友元。

2025-08-31 18:06:08 737

原创 【C++】构造函数初始化详解

本文介绍了C++中构造函数初始化与赋值的区别,重点讲解了初始化列表的使用场景和优势。

2025-08-31 17:32:14 1110

原创 【C++】日期类实现详解:代码解析与复用优化

本文实现了一个完善的日期类(Date),主要功能包括:日期计算(加减天数、递增递减)、日期比较(6种关系运算符)和日期差值计算。设计亮点在于高内聚低耦合,通过运算符复用减少代码冗余。

2025-08-30 23:54:43 742

原创 【C++】C++ const成员函数与取地址操作符重载

本文介绍了C++中const成员函数和取地址操作符重载的关键概念。

2025-08-30 23:33:45 519

原创 【C++】拷贝构造函数:深拷贝与浅拷贝详解

本文介绍了C++中的拷贝构造函数及其特性。拷贝构造函数用于通过已有对象初始化新对象,其参数必须是类类型对象的引用,否则会导致无限递归。编译器会生成默认的拷贝构造函数,对内置类型进行浅拷贝(按字节复制),对自定义类型调用其拷贝构造函数。对于不涉及资源申请的类,默认拷贝构造函数足够使用;但涉及资源管理(如动态内存)时,必须自定义深拷贝的拷贝构造函数,以避免浅拷贝导致的资源重复释放问题。文中通过日期类和栈类的例子,对比了浅拷贝和深拷贝的区别,并说明了深拷贝的实现原理。

2025-08-29 22:18:06 825

原创 【C++】运算符重载深度解析

本文介绍了C++运算符重载的概念和使用方法。主要内容包括: 运算符重载的基本语法和使用场景,通过operator关键字定义特殊函数。 赋值运算符重载的实现要点,包括参数传递、返回引用和自赋值检查。 前置++和后置++的重载区别,后置++通过增加int参数区分。 并以一个完整的日期类为例,展示了各种运算符重载的具体实现,包括比较运算符、算术运算符、自增自减运算符等,并强调了代码复用的重要性。

2025-08-29 22:17:49 332

原创 【C++】析构函数:对象的完美谢幕

析构函数是C++中用于对象资源清理的特殊成员函数,在对象生命周期结束时自动调用。其特点包括:以~加类名命名、无参数无返回值、不可重载,且每个类只能有一个析构函数。若未显式定义,编译器会生成默认析构函数,对内置类型不做处理,但会调用成员自定义类型的析构函数。析构函数在函数栈帧销毁前(作用域结束时)按构造逆序触发,确保资源释放。

2025-08-28 18:03:42 1340

原创 【C++】揭秘构造函数六大特性

C++类的默认成员函数包括6个自动生成的函数(构造函数、析构函数、拷贝构造等)。构造函数是特殊成员函数,与类同名,在对象创建时自动调用,用于初始化而非创建对象。其特性包括:无返回值、可重载、自动调用。若未显式定义构造函数,编译器会生成默认无参构造函数。对于内置类型成员,默认构造函数不初始化其值(C++11允许声明时赋默认值);自定义类型成员则会调用其默认构造函数。注意默认构造函数只能有一个,无参构造和全缺省构造不能同时存在,否则会产生调用歧义。

2025-08-28 18:02:55 309

原创 【C++】类对象内存布局与大小计算

本文介绍了类和结构体的内存计算规则。对于类对象,只计算成员变量所占内存(遵循结构体内存对齐规则),成员函数不占用对象空间;空类对象占用1字节用于占位标识。结构体内存对齐规则包括:首成员从0偏移开始,其他成员按对齐数(成员大小与默认对齐数较小值)整数倍地址存放;结构体总大小为最大对齐数整数倍;嵌套结构体需按其最大对齐数对齐。

2025-08-27 12:59:16 212

原创 【C++】类与对象:类成员函数this指针详解

本文介绍了C++中this指针的特性及其使用场景。通过Date类示例展示了成员函数如何通过隐式this指针访问对象数据。this指针由编译器自动传递,类型为类类型*const,只能在成员函数内使用。当this指针为空时,是否导致程序崩溃取决于是否解引用该指针:访问成员变量会引发崩溃,而仅调用不涉及成员变量的函数仍可正常运行。这解释了为何空指针调用PrintA()会崩溃而Show()却能执行。

2025-08-27 12:55:37 397

原创 【C++】类与对象:定义与实例化

本文介绍了C++面向对象编程基础概念。重点对比了C语言面向过程和C++面向对象的特点,说明面向对象更关注对象间的交互。详细讲解了类的定义方式,包括成员变量和成员函数的声明与实现,推荐使用头文件和源文件分离的第二种定义方式。介绍了访问限定符(public/protected/private)的作用及其在struct和class中的默认区别。解释了类的作用域及"::"操作符的使用,并通过实例说明类的实例化过程。最后以设计图和房子的比喻,形象说明了类与对象的关系。

2025-08-26 22:34:13 829

原创 【C++】C++11特性:范围for循环与指针空值nullptr详解

C++11引入了基于范围的for循环,简化了数组和容器的遍历操作。其语法使用冒号分隔迭代变量和迭代范围,自动处理范围边界,支持continue和break控制。使用条件要求迭代范围明确且对象支持++和==操作。对于指针空值,C++11推荐使用nullptr替代NULL,因为NULL可能被定义为0导致类型混淆,而nullptr能明确表示空指针,提高代码安全性和可读性。nullptr无需头文件,与void*占用相同内存空间,是更健壮的空指针表示方式。

2025-08-26 22:18:19 242

原创 【C++11】auto关键字:自动类型推导

C++11中auto关键字被用于自动推导变量类型,简化复杂类型的声明。auto会根据初始化表达式自动匹配类型,但必须进行初始化。使用细则包括:结合指针和引用时auto*和auto无区别,引用需加&;同一行多个变量类型必须一致。auto不能用于函数参数、数组声明,且C++11仅保留其类型推导功能。auto常用于简化迭代器声明,配合新式for循环和lambda表达式使用,提升代码可读性。

2025-08-25 22:16:57 432

原创 【C++】内联函数的作用与机制

内联函数是C++中用于优化频繁调用的短小函数性能的特性,通过inline关键字修饰,编译器会在调用处直接展开函数体,避免函数调用的栈帧开销。它以空间换时间,适用于非递归、规模小的函数。与C语言的宏函数相比,内联函数具有类型安全、便于调试等优势。但需注意定义与声明不能分离,否则会导致链接错误。在C++中,内联函数和const/enum常被用来替代宏,以提高代码安全性和可维护性。

2025-08-25 22:10:00 493

原创 【数据结构】排序算法全解析

本文介绍了排序的基本概念和常见算法。排序是将记录按关键字排列的操作,分为稳定排序和不稳定排序。内排序指数据全在内存中排序,外排序则涉及内外存数据交换。文章列举了多种排序算法接口实现,包括插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序及其非递归实现、归并排序及其递归/非递归实现、外排序和计数排序。特别强调了理解算法的时间复杂度和空间复杂度的重要性,指出稳定性指相同值元素排序后相对顺序不变,提醒读者不要死记硬背而应注重理解算法原理。

2025-08-24 16:28:58 481

原创 【数据结构】归并排序:高效分治的奥秘

归并排序是一种基于分治法的排序算法,擅长处理外排序问题。其核心思想是将序列递归分解为有序子序列,再通过合并操作得到完全有序的结果。算法实现包括递归和非递归版本,都需要O(N)的临时空间用于合并操作。归并排序的时间复杂度为O(N*logN),空间复杂度为O(N),具有稳定性。在处理大文件排序时,可先将文件分割成内存可容纳的小块,分别排序后再逐步归并,最终完成整个文件的排序。这种特性使归并排序成为处理海量数据外排序的有效方法。

2025-08-24 16:28:12 428

原创 【数据结构】计数排序:有时比快排还快的整数排序法

计数排序是一种非比较排序算法,适用于整数数据且范围较小的情况。其核心思想是统计每个元素出现的次数,然后根据统计结果将元素重新排列。虽然时间复杂度高效(O(N+range)),但空间复杂度较高(O(range)),且仅适用于整数类型。该算法在数据范围集中时性能优异,比快速排序更快,但在数据范围较大时空间消耗显著。

2025-08-23 16:01:06 579

原创 【数据结构】快速排序:算法详解与优化技巧

快速排序是一种高效的交换排序算法,采用分治思想,通过选取基准值将序列分成左右两部分分别排序。文章详细介绍了三种单趟排序实现方法:左右指针法、挖坑法和前后指针法,并分析了时间复杂度(最优O(NlogN),最坏O(N²))。针对有序数组的最坏情况,提出"三数取中"优化策略和小区间切换插入排序的改进方案。最后展示了非递归实现方式,利用栈模拟递归过程以避免栈溢出风险。快速排序综合性能优秀,适合多数应用场景。

2025-08-23 16:00:42 1204

原创 【数据结构】选择排序:直接选择与堆排序详解

直接选择排序算法与堆排序算法原理讲解,代码实现。

2025-08-22 23:48:22 793

原创 【数据结构】玩转插入排序:直接插入与希尔排序详解

摘要:插入排序通过将元素逐个插入已排序序列实现排序,包括直接插入排序和希尔排序两种方法。直接插入排序将每个元素与前面有序序列比较并插入合适位置。希尔排序是改进版,通过分组排序(gap>1)逐步缩小间隔,最终用直接插入排序(gap=1)完成排序,效率更高。希尔排序的时间复杂度取决于gap取值,难以精确计算,但通过预排序优化了直接插入排序的性能。两种算法都体现了扑克牌排序的类似思想。

2025-08-22 23:35:53 380

原创 【C++】引用详解:特性、使用与底层实现

文章摘要: 本文系统介绍了C++引用的核心概念与特性。引用是变量的别名,与实体共享内存空间,定义时必须初始化且不可更改引用对象。常引用需注意类型匹配和权限控制(不能放大权限)。引用常用于函数参数(输出型参数、提升效率)和返回值(需确保变量生命周期)。与指针相比,引用更安全但灵活性较低,底层通过指针实现。关键区别包括初始化要求、多级引用限制、访问方式等。引用能减少拷贝开销,但返回局部变量引用会导致安全隐患,可通过static解决。

2025-08-21 23:13:17 1302

原创 【C++】C++函数重载原理与extern “C“详解

文章摘要:函数重载是C++中允许同名函数通过不同参数(类型/个数/顺序)实现不同功能的技术,其原理在于编译时的名字修饰机制。C语言不支持重载因其不修饰函数名,而C++通过参数信息修饰函数名实现区分。当C程序调用C++库时,需使用extern "C"声明使函数名保持C风格,确保链接成功,但会丧失重载能力。这种机制体现了C++对C的兼容性,同时保持了自身的灵活性。

2025-08-21 23:04:28 891

原创 【FreeRTOS】软件定时器

摘要:本文介绍了FreeRTOS软件定时器的实现机制和使用方法。定时器有运行和冬眠两种状态,由高优先级的守护任务管理。创建定时器可采用动态或静态内存分配方式,回调函数需快速执行且不可阻塞。定时器操作(启动、停止、删除)通过命令队列实现,包含普通和ISR版本。重点说明了xTimerStart()等函数的参数含义,强调xTicksToWait是命令入队超时时间而非定时周期。定时器启动后会按照预设周期执行回调函数,重复启动将重置定时器。

2025-08-20 22:22:38 521

原创 【FreeRTOS】临界资源管理

FreeRTOS通过多种机制实现资源管理的互斥操作

2025-08-20 22:22:10 446

原创 【FreeRTOS】任务通知

本文介绍了任务通知的三种状态:未等待通知(taskNOT_WAITING_NOTIFICATION)、等待通知(taskWAITING_NOTIFICATION)和已接收通知(taskNOTIFICATION_RECEIVED)。通过两个场景说明了状态转换过程:场景一描述通知先到达但未被立即处理的情况,场景二说明通知到达并唤醒任务后的状态变化。最后提及实现任务通知的两类核心函数xTaskNotify和xTaskNotifyWait。完整展现了任务通知机制的状态流转和基本使用方法。

2025-08-19 19:38:38 216

原创 【FreeRTOS】任务切换与调度

FreeRTOS的任务切换与调度机制

2025-08-19 19:38:16 552

原创 【FreeRTOS】事件组

摘要:事件组是FreeRTOS中的同步机制,每位代表一个事件,包含等待链表。任务通过xEventGroupSetBits()设置事件,在ISR中需使用xEventGroupSetBitsFromISR()以避免不确定性。后者通过后台任务处理事件设置,可能唤醒多个任务。若后台任务优先级高于被中断任务,会返回pdTRUE。成功发送队列数据则返回pdPASS。

2025-08-17 20:16:26 323

原创 【FreeRTOS】信号量与互斥量

信号量是任务同步的核心机制,与队列不同,它仅用于资源计数。二进制信号量最大值为1,多次释放无效。任务唤醒策略遵循优先级规则:高优先级优先,同优先级按等待时间排序。优先级反转问题指低优先级任务持有资源时,高优先级任务被阻塞,此时中优先级任务可能抢占执行。互斥量通过优先级继承解决该问题,当高优先级任务被阻塞时,临时提升低优先级任务优先级。但该方案不能完全消除优先级反转,仅能减轻影响。使用互斥量需在配置文件中预先定义。

2025-08-17 20:16:03 440

原创 【FreeRTOS】队列集

文章介绍了队列集在嵌入式系统中的实现方法。通过创建队列数组和注册机制,实现数据的高效分发。具体包括:1)使用xQueueCreateSet创建队列集;2)通过xQueueAddToSet将队列加入集合;3)利用xQueueSelectFromSet读取队列集数据。重点阐述了数据分发的两种方案:直接写多个队列(不推荐)和更优的队列数组注册机制。后者通过IR_RegisterQueueHandle注册队列到全局数组,由DispatchKey函数统一分发,降低了驱动层与应用层的耦合性。

2025-08-16 22:37:14 449

原创 STM32标准库学习笔记

个人stm32标准库学习轨迹记录

2025-08-16 22:36:09 1050

原创 【C++】缺省参数

为函数的。

2025-08-15 18:53:39 496

原创 【C++】命名空间

C++命名空间机制解析,C++引入命名空间(namespace)机制解决全局标识符命名冲突问题。命名空间通过划分作用域,将变量、函数和类等标识符进行本地化封装。

2025-08-15 18:51:47 450

原创 【FreeRTOS】任务管理:创建与删除任务,任务优先级与阻塞

本文介绍了RTOS任务创建与管理的方法,包括任务优先级的使用和任务栈大小的估算。

2025-08-14 19:25:18 1008

原创 opencv:傅里叶变换有什么用?怎么写傅里叶变换?

什么是时域?什么是频域?

2025-08-14 19:15:17 314

原创 opencv:如何提取图片中的数字(实操,附代码)

本文介绍基于模板匹配的银行卡数字识别方法,详细介绍了图像处理各环节的实现代码,包括轮廓排序、模板匹配得分计算等关键步骤,最终成功实现了银行卡数字的自动识别功能。

2025-08-13 21:21:00 205

原创 opencv:直方图

摘要:本文介绍了图像直方图的基本概念、计算方法和应用。直方图通过统计像素灰度值分布反映图像特征,可用于质量评估、阈值选择和对比度增强。详细讲解了OpenCV中直方图计算的cv2.calcHist函数参数和使用方法,包括掩码操作实现局部区域分析。同时介绍了直方图均衡化技术,包括全局均衡化和自适应均衡化(CLAHE)两种方法,通过对比实验展示了自适应方法在保留细节方面的优势。文章提供了完整的代码示例,帮助理解如何实现这些图像处理技术。

2025-08-13 21:09:40 1052

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除