- 博客(56)
- 资源 (1)
- 收藏
- 关注
原创 21.【C++11】(“{}”列表初始化、右值引用和移动语义、引用折叠和完美转发)
C++11引入了多项关键特性。在列表初始化方面,C++11统一了初始化方式,支持内置类型和自定义类型的{}初始化,并引入std::initializer_list支持容器初始化。右值引用和移动语义是核心改进,通过区分左值/右值、左值引用/右值引用,实现了资源的高效转移。文章详细解析了移动构造/移动赋值的实现原理,及其在传值返回和容器操作中的应用场景。此外,还探讨了完美转发机制,通过引用折叠和forward模板保持参数原始类型属性。这些特性共同提升了C++的性能表现和代码简洁性
2025-05-31 18:59:21
431
原创 03.【Qt开发】Qt新建初始代码介绍、实现界面打印helloworld
本文介绍了Qt应用程序开发的基础知识,包括项目结构、编译过程和两种实现"Hello World"的方式。主要内容涵盖:1. Qt项目文件结构(.pro文件配置说明,头文件和源文件组织);2. QApplication核心类的作用。两种实现“helloworld”的方法:1. 图形化界面设计方法;2. 纯代码实现控件创建。
2025-05-29 17:05:11
1007
原创 02.【Qt开发】Qt Creator介绍及新建项目流程
本文详细介绍了Qt Creator集成开发环境的使用方法。第一部分讲解了如何创建桌面快捷方式,并详细说明了Qt Creator的界面布局和功能模块,包括菜单栏、模式选择、构建套件选择器等8个主要组成部分。第二部分重点介绍了新建项目的完整流程:从模板选择到项目配置,详细说明了location、构建系统、Details、Translation等步骤的设置要点。文章还对编辑界面的各个功能区域进行了说明,包括左边栏的文件管理、代码编辑区的导航功能、UI设计界面的组件拖放以及构建区的运行调试选项。
2025-05-27 19:13:01
1186
原创 20.【C++进阶】用哈希表封装myunordered_map和myunordered_set
本文分析了哈希表的实现框架,并模拟实现unordered_map和unordered_set。模拟实现中,通过HashTable模板类复用哈希表功能,分别定义MapKeyOfT和SetKeyOfT仿函数来提取键值。迭代器实现采用单链表思路,难点在于operator++处理跨桶遍历。最终实现的unordered_map支持[]操作符,通过修改insert返回pair<iterator,bool>实现。
2025-05-27 17:15:00
885
原创 19.【C++进阶】unordered_map和unordered_set的使用、哈希表的实现
本文主要介绍了哈希表及其实现方式。首先分析了unordered_set和unordered_map与set/map的差异,包括key要求、迭代器特性和性能比较。随后详细讲解了哈希表的核心概念,包括哈希函数设计(除法散列、乘法散列、全域散列等)、哈希冲突处理方法(开放定址法和链地址法)。重点实现了两种冲突解决方案:线性探测的开放定址法和哈希桶的链地址法,并讨论了扩容策略、负载因子控制等关键技术点。文章还探讨了key类型转换、字符串特化等实际问题,为理解和实现高效哈希容器提供了完整的技术路线。
2025-05-26 17:22:55
1126
原创 18.【C++进阶】封装红黑树实现mymap和myset
本文分析了map和set的源码实现,重点探讨了其核心框架和红黑树(rb_tree)的泛型设计。map和set通过红黑树实现,map存储键值对,set仅存储键。文章还讨论了红黑树的插入、删除和查找操作,并指出源码中命名风格的不一致性。接着,文章模拟实现了map和set,复用了红黑树框架,并通过仿函数解决了插入时的比较问题。最后,文章详细介绍了迭代器的实现,包括++和--操作符的逻辑,并展示了如何通过红黑树实现map的[]操作符。整体上,文章通过源码分析和模拟实现,深入探讨了map和set的底层实现机制。
2025-05-26 17:21:41
583
原创 17.【C++进阶】红黑树实现(二叉搜索树,通过对任何一条从根到叶子的路径上各个结点的颜色进行约束)
红黑树是一种自平衡的二叉搜索树,通过在每个节点上增加颜色标记(红色或黑色)并遵循特定规则,确保树的高度平衡。其核心规则包括:根节点为黑色、红色节点的子节点必须为黑色、从任一节点到其子节点的路径上黑色节点数量相同。这些规则保证了红黑树的最长路径不超过最短路径的两倍,从而维持近似平衡。红黑树的插入操作通过变色和旋转(单旋或双旋)来维护平衡,时间复杂度为O(log n)。与AVL树相比,红黑树的平衡要求较为宽松,旋转次数较少,适合频繁插入和删除的场景。红黑树广泛应用于C++ STL中的map和set等容器。
2025-05-23 12:16:46
1016
原创 16.【C++进阶】AVL树的实现(自平衡二叉查找树,通过控制高度差去控制平衡)
文章讲述了AVL树,AVL树是一种自平衡二叉搜索树。其核心特性是左右子树的高度差绝对值不超过1,通过平衡因子(右子树高度减左子树高度)来维护平衡。AVL树的高度控制在logN,使得增删查改操作的时间复杂度为O(logN),相比普通二叉搜索树有显著提升。插入操作时,按二叉搜索树规则插入后,更新路径上的平衡因子,若出现不平衡则通过旋转(左旋、右旋、左右双旋、右左双旋)恢复平衡。AVL树的查找与普通二叉搜索树相同,效率为O(logN)。以及AVL树的实现
2025-05-23 12:11:24
712
原创 01. 【Qt开发】Qt介绍及Qt开发环境搭建(2025.05最新下载方式)
Qt简介(发展史、支持的平台、版本、优点及应用场景的介绍);Qt SDK安装流程-2025.05最新版官方下载安装流程,包括步骤的详细注释说明。
2025-05-22 18:34:29
1813
2
原创 结课作业自选01. 内核空间 MPU6050 体感鼠标驱动程序(二)(完整实现流程)
本文介绍了基于MPU6050传感器的体感鼠标驱动程序的实现流程。代码通过I2C总线与MPU6050通信,读取加速度数据并转换为鼠标位移,同时支持按键检测功能。主要流程包括:模块加载时自动注册I2C驱动,设备树匹配成功后执行探测函数mpu_mouse_probe,初始化设备并启动定时器。定时器到期后触发回调函数timer_callback,调度工作队列处理函数accel_work_handler,读取加速度数据并应用低通滤波,最终通过虚拟鼠标控制实现体感功能。代码还包含GPIO初始化、按键去抖动等细节处理。
2025-05-22 08:29:29
893
原创 结课作业自选01. 内核空间 MPU6050 体感鼠标驱动程序(一)
1. linux嵌入式系统内核介绍,内核程序的编写,包括必要的流程和函数。2. 几个内核驱动的示例:内核获取gpio状态,内核控制led灯,内核实现mpu6050体感鼠标。包括实现流程、代码详解、函数解释、执行指令等。
2025-05-22 08:28:53
643
原创 结课作业03. 混杂设备驱动led流水灯实现
本文介绍了如何在Linux内核中编写一个混杂设备驱动程序(gpios-misc-drv.c),控制3个LED灯。该驱动程序通过写入/读出3个字节来设定和读取3个GPIO引脚的电平状态,每个字节代表一个引脚。驱动程序加载后会自动生成/dev/gpio-misc设备节点。文章详细描述了驱动程序的实现流程,包括模块初始化、GPIO引脚配置、混杂设备注册、文件操作结构体定义以及read和write函数的实现。此外,还提供了一个应用程序(gpios-misc-app)的伪代码,展示了通过调用驱动程序实现流水灯效果。
2025-05-21 15:45:04
943
原创 结课作业01. 用户空间 MPU6050 体感鼠标驱动程序
linux开发板通过uinput创建虚拟鼠标,通过mpu6050的加速度数据控制体感鼠标移动,使用开发板的按键模拟鼠标左右键,包括功能实现流程、函数详解及源代码。完成虚拟体感鼠标功能实现。
2025-05-21 15:41:37
1376
原创 15.【C++进阶】map和set的使用(关联式容器)
文章介绍了C++ STL中的序列式容器和关联式容器,重点讲解了set和map系列的使用。set用于存储唯一键值,map用于存储键值对,两者都支持迭代器遍历和自定义比较函数。multiset和multimap则允许键值重复。文章还详细介绍了set和map的构造、增删查操作,以及如何使用迭代器和[]操作符进行数据修改。最后,通过示例代码展示了如何利用map统计水果出现次数,并对比了multimap与map的差异。
2025-05-20 10:12:21
766
原创 03. Linux嵌入式系统学习笔记(三)(用户空间驱动程序练习:体感光标实现mpu+i2c+framebuffer)
本文章讲解了linux嵌入式开发板的四个实例:1.shell脚本实现流水灯。2.i2c接收mpu6050的数据并转换成加速度打印。3.framebuffer在屏幕映射虚拟内存,操作虚拟内存在频幕上打印光标。4.根据2和3实现体感光标可控制。
2025-05-12 09:00:00
577
原创 0X. Linux嵌入式系统(课堂笔记)
虚拟机linux与开发板通过usb连接;通过网络将虚拟机和开发板进行桥接并实现文件的拷贝提取等操作,在开发板实现白屏、按键使用等案例
2025-05-08 16:19:48
781
原创 14.【C++进阶】二叉搜索树(二叉搜索树的增、删、差及代码实现,key_value的概念及实现)
C++二叉搜索树(BST)是一种有序二叉树,左子树的值≤根节点,右子树的值≥根节点,支持高效查找、插入和删除。理想情况下时间复杂度为O(logN),但若退化为单支树则降至O(N)。插入和查找通过值比较定位位置;删除分四种情况处理,双子节点时采用替换法。文档提供了C++实现代码,并区分了纯Key搜索(如车牌识别)和Key/Value搜索(如字典翻译)的应用场景。由于BST可能不平衡,需进一步学习AVL树或红黑树来优化性能。
2025-04-21 09:09:41
807
原创 13.【C++进阶】多态(多态的定义、概念及实现,虚函数和抽象类)
C++的多态机制,包括编译时多态(如函数重载)和运行时多态(通过虚函数实现)。运行时多态需满足两个条件:基类指针或引用调用虚函数,且派生类重写该虚函数。文件详细解析了虚函数表、动态绑定与静态绑定的区别,以及纯虚函数和抽象类的作用。此外,还介绍了协变、析构函数重写、override和final关键字,并通过代码示例说明多态的实现原理和应用场景。
2025-04-14 09:48:26
809
原创 12.【C++进阶】继承(继承的概念和使用、基类成员的访问、作用域、虚继承)
C++继承的概念和使用、继承基类成员的访问方式的变化、继承类模板;基类和派生类的作用域、隐藏规则;派生类的默认成员函数;继承与友元、继承与静态成员;多继承、虚继承、菱形继承;继承和组合的介绍及代码示例。
2025-04-07 18:33:00
1061
原创 11.【C++】模板进阶(函数模板特化、类模板全特化和偏特化、模板的分离编译)
C++模板的分类:类型形参模板和非类型形参模板。模板特化的概念及使用:函数模板特化,类模板特化(全特化、偏特化)。模板的生命和定义推荐放在一个文件中。模板的优缺点
2025-03-31 14:20:56
737
原创 10.【C++】stack(栈)、queue(队列)和priority_queue(堆)的使用及模拟实现
C++stack(栈)、queue(队列)和priority_queue(堆)的介绍及使用,及通过vector、list、deque的封装模拟实现stack、queue、priority_queue。容器适配器的概念介绍。
2025-03-27 13:19:14
944
原创 00.【Linux系统编程】 Linux初识(云服务器设置CentOS并使用、Xshell链接云服务器)
Linux初识(云服务器设置CentOS并使用、Xshell链接云服务器),华为云免费申请一个月的云服务器;下载Xshell,并通过Xshell连接华为云服务器进行操作。
2025-03-27 13:08:26
619
原创 02. Linux嵌入式系统学习笔记(二)(编写C程序进行文件操作、模块化编程makefile的使用)
Linux系统级文件I/O通过open/read/write/close实现低层文件读写,结合临时文件与rename确保数据安全;模块化编程使用头文件声明接口与源文件分离实现,借助Makefile的变量、依赖规则及自动变量($@, $^)自动化编译,实现增量构建与高效代码管理。
2025-03-26 13:43:22
867
原创 01. Linux嵌入式系统学习笔记(一)(linux基础指令)
本文通过一系列实战练习,系统性地介绍了 Linux 系统管理、Shell 脚本编程及内核源码分析的核心操作。涵盖文件管理、进程控制、网络文件系统(NFS)配置、磁盘镜像操作等基础技能,并结合三个实际脚本案例(贡献者统计、危险函数检测、内核彩蛋查找),深入解析 Shell 脚本的编写与优化方法。
2025-03-21 20:18:39
940
原创 09.【C++】list链表(STL中的列表容器,C++封装的带头双向链表,可实现指定类型的增删查改,迭代器操作等功能)
C++list的介绍及使用,list相当于C++集成的链表的库(list使用模板定义,使用时要指定数据类型),可实现增删查改,迭代器操作等功能。本文介绍了常见list接口的使用以及list的模拟实现。
2025-03-17 11:19:01
784
原创 08.【C++】vector(STL中的序列容器,C++封装的顺序表,可实现指定类型的增删查改、迭代器操作等功能)
C++vector的介绍及使用,vector相当于C++集成的顺序表的库(vector使用模板定义,使用时要指定数据类型),可实现增删查改,空间大小查看,迭代器操作等功能。本文介绍了常见vector接口的使用以及vector的模拟实现。
2025-03-10 18:58:42
574
原创 07.【C++】STL简介和string类的使用(string类对象的输入cin>>、输出<<、尾插+=、访问[ ]、获取对象size、capacity等以及string类的模拟实现)
C++string类的使用,string类的函数,对字符串的各种操作,包括:构造、拷贝构造、获取字符串对象大小size、获取空间大小capacity、string类对象的访问operator[]的运算符重载;string对象的插入insert、尾插append,operator+=、删除erase等;string类对象的cin输入>>,cout输出<<等。本文介绍了常见string接口的使用以及string的模拟实现。
2025-03-03 21:34:28
912
原创 06.【C++】模板初阶(template<typename T>,充分复用函数,函数模板和类模板的使用)
C++函数模板和类模板的使用(用模板解决相同功能的函数处理不同类型变量复用的问题,想一想活字印刷术。想到自己写Swap,需要Swap(int a, int b),Swap(double a, double b),用模板只需要写一个template<typename T> void Swap(T a, T b),可解决上述一类的问题
2025-02-25 10:54:36
982
原创 05.【C++】内存管理(C++内存申请new,释放delete的概念及使用[代替C语言中的malloc和free],递归出现栈溢出的原因)
C++内存申请new,释放delete的概念及使用(用来代替C语言中的malloc和free),堆、栈空间大小,为什么递归时可能出现栈溢出,new和delete的实现原理。
2025-02-17 21:38:47
918
原创 04.【C++】类和对象(下)(初始化列表、static静态成员、友元friend[类外函数使用类私有成员]、内部类、匿名对象等)
C++的初始化列表的使用及约束条件(引用成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进行初始化,否则会编译报错。),类型转换,static静态成员的用法,友元声明(突破类的访问限定符,外部函数可以使用类的私有和保护成员),内部类,匿名对象,对象拷贝时编译器的优化。
2025-02-17 14:21:34
1268
原创 03.【C++】类和对象(中)(构造函数-函数名与类名相同的成员函数、析构函数、拷贝构造函数、赋值运算符重载等定义及使用)
C++默认成员函数介绍及使用,包括:构造函数(函数名与类名相同的成员函数),析构函数(函数名为类名前加~),拷贝构造函数(函数名与类名相同的构造函数的重载),赋值运算符重载,取地址运算符重载。以及日期类的实现(日期加减)。附有相关示例及文字解释。
2025-02-15 16:26:51
1021
原创 02.【C++】类和对象(上)(class类的定义及使用、访问限定符public\private\protected、this指针)
C++类的定义及使用,类中public,private,protected的作用,类的实例化,类实例化对象的存储及内存对齐规则;this指针的定义;C++与C语言实现Stack栈的对比
2025-02-13 16:51:12
651
原创 01.【C++】C++入门基础(namespace、::、<<、>>、cin\cout、&引用、inline、nullptr等概念及应用)
C++基本概念:namespace、:: 、cin、cout、iostream、endl、&引用、inline、nullptr的概念及相关应用。附有代码示例及文字讲解。
2025-02-11 14:31:11
1076
C++stack(栈)、queue(队列)、priority-queue(堆)的模拟实现
2025-03-03
C++list的模拟实现
2025-02-27
C++vector的模拟实现
2025-02-25
C++string类的模拟实现
2025-02-21
C++日期类的实现,包括日期+,+=,-,-=和>,<,>=,<=,==,!= ;日期 - 日期 得天数 ;流提取>>,流插入<< 运算符重载等
2025-02-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人