自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Qt信号与槽机制入门详解:从基础语法到界面交互实战

Qt 是一个跨平台的 C++ 图形用户界面(GUI)应用程序开发框架,由挪威公司 Trolltech(现为 The Qt Company)开发。它不仅支持桌面应用(如 Windows、Linux、macOS),还广泛应用于嵌入式系统(如智能家居、工业控制)、移动应用(Android、iOS)以及物联网(IoT)领域。Qt 的核心优势在于其“一次编写,多平台部署”的能力,开发者只需维护一套代码即可适配不同操作系统。应用领域桌面应用。

2025-03-24 09:30:00 1222 52

原创 Qt信号与槽高级特性与项目实战:原理剖析与工程化应用指南

在小型项目里,信号与槽最直观的应用就是界面控件与逻辑函数之间的事件处理,比如按钮点击做运算、数据更新刷新界面等。在更复杂的项目里,借助信号与槽可以实现分层、解耦,让不同模块之间的交互更灵活、更易维护。信号与槽并不是“银弹”,但在 Qt 的项目中几乎是“必不可少”的基础工具——只要合理设计,就能让工程代码更加清晰,扩展性更高。

2025-03-23 20:38:20 891 14

原创 【C++】AVL树(一万字超详细,看这一篇就够了!)

AVL 树也叫做平衡二叉树(平衡二叉排序树)是一种自平衡的二叉搜索树(BST),它通过严格的平衡因子控制树的高度,从而在插入、删除和查找操作中保持 O(log n) 的时间复杂度。

2025-03-20 09:11:57 6285 62

原创 你真的了解C++ map和multimap吗?一文解锁底层原理与高频考点

/ 定义一个 map,键为 int,值为 string// 插入元素// 使用下标操作符// 使用 insert 方法// 使用 make_pair// 1. 默认构造函数// 创建一个空的 map,键的类型为 int,值的类型为 string// 使用默认的比较函数 less<int> 对键进行排序// 2. 范围构造函数// 从一个包含 pair 的容器的迭代器范围来初始化 map// 3. 拷贝构造函数// 创建一个新的 map,它是另一个 map 的副本。

2025-03-16 09:30:00 8943 70

原创 如何高效查阅Qt6文档?手把手教你读懂官方文档

掌握Qt文档的查阅能力,是成为Qt高级开发者的核心技能。每天花10分钟阅读一个类的文档用书签功能建立自己的API速查表参与官方文档的翻译与纠错下一篇预告:《Qt6信号与槽的八大进阶技巧》- 揭秘连接方式、性能优化与异步处理!

2025-03-14 09:30:00 1027 12

原创 专业视角:set 和 multiset的原理与应用解析

在初阶阶段,我们已经接触过STL中的部分容器,比如:vector、list、deque、forward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。那什么是关联式容器?它与序列式容器有什么区别?关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。set是 C++ 标准库中的一个关联容器,它存储的是唯一的元素,并且自动按一定的顺序排列元素。它通常基于。

2025-03-13 09:00:00 761 32

原创 【C++】二叉搜索树(二叉查找树、二叉排序树)详解

当前树的性质由当前根节点与左右子树的性质共同决定;+ 左子树和右子树本身可以被视为规模更小的二叉搜索树,这种嵌套结构直接表明递归定义的存在。//树节点的结构体//千万别少了这句!!!!!!K _key;BSTreeNode(const K& key)//这里是K是大写,一定要注意,改了好多{}public://默认构造//拷贝构造private://下面这部分隐藏,对外只提供InOrder().用户只用关注接口不必关心细节。

2025-03-11 19:52:58 6382 49

原创 解决 Qt 项目中出现的OPENSSL_Uplink(00007FFA9E04EC88,08): no OPENSSL_Applink

在 Windows 上使用 OpenSSL 时,由于 Windows 动态链接库(DLL)的工作机制与 Linux 等系统不同,OpenSSL 需要特别的适配来正确处理堆栈和线程。是 OpenSSL 提供的一个源文件,专门用于解决 Windows 上的多线程问题。在 Qt 项目中,如果没有正确引用它,就会导致上述错误。,并确保正确链接 OpenSSL 库和设置 DLL 文件路径,你可以解决这个问题。通过这些方法,你的 Qt 项目就可以正常使用 OpenSSL,避免出现。,避免出现符号名称修饰的问题。

2025-03-06 15:53:10 520 3

原创 【C++】继承和多态常见的面试问题

菱形继承指的是一个类通过两个子类继承了同一个基类,这两个子类再被另一个派生类继承,形成菱形结构。class A {};在这个结构中,D通过B和C间接继承了两次A,这就形成了菱形继承。菱形继承的问题数据冗余:由于D通过B和C继承了两份A,导致存在两份相同的A成员。这在内存中会引起冗余,浪费空间。二义性问题:当在D中试图访问A的成员时,编译器无法确定该访问来自B继承的A还是C继承的A,从而导致二义性。例如:D d;d._a;// 编译器不确定是访问 B::_a 还是 C::_a菱形虚拟继承。

2024-10-31 08:30:00 2854 140

原创 【C++】多态与虚函数:深入理解对象的动态行为(万字长文详解)

多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。

2024-10-29 09:39:00 1391 59

原创 【C++】继承(万字全解)

class A// 类 A 的定义,可以包含成员和方法class Bprivate:A _a;// 类 B 包含一个类 A 的实例组合是指一个类包含另一个类的实例作为其成员变量。容器类和被包含类之间的关系是一种“拥有”关系。例如,类B包含一个类型为A的对象_a,这表示B拥有A的一个实例。组合中的成员对象的生命周期与容器对象是相同的。当B的实例被创建时,A的实例_a也会被创建;当B的实例被销毁时,A的实例_a也会被销毁。这意味着没有内存泄漏的风险,因为A的实例完全由B管理。

2024-10-22 20:40:15 1304 98

原创 【排序算法】归并排序、计数排序、稳定性分析

情况时间复杂度空间复杂度最好情况O(n log n)O(n)最坏情况O(n log n)O(n)平均情况O(n log n)O(n)时间复杂度:归并排序无论在最好、最坏还是平均情况下,时间复杂度始终为O(n log n)。空间复杂度:由于需要额外的空间来存储合并过程中的临时数组,归并排序的空间复杂度为O(n),递归调用栈的空间消耗为O(log n),总空间复杂度为O(n)。稳定性:归并排序是稳定的,适合在对稳定性要求较高的场景下使用。稳定的排序算法。

2024-10-18 20:17:03 4357 67

原创 【排序算法】快速排序、冒泡排序

情况时间复杂度空间复杂度最好情况O(n log n)O(log n)最坏情况O(n^2)O(n)平均情况O(n log n)O(log n)时间复杂度:快速排序的平均和最好情况时间复杂度为O(n log n),但在最坏情况下可能会退化为O(n^2)。空间复杂度:快速排序是原地排序算法,额外的空间复杂度为O(1),但递归栈的空间消耗取决于递归深度,平均为O(log n),最坏情况下为O(n)。通过合理的基准值选择(如三数取中法)和优化手段,快速排序在实践中通常表现出非常高效的。

2024-10-11 12:09:02 2398 71

原创 【排序算法】选择排序、堆排序

堆排序是一种基于堆(Heap)数据结构的排序算法。最大堆:每个节点的值都大于或等于其子节点的值。根节点是最大值。最小堆:每个节点的值都小于或等于其子节点的值。根节点是最小值。首先将无序数组构建为一个最大堆。然后,将堆顶(即最大值)与数组的最后一个元素交换,缩小堆的范围,对剩下的元素继续调整成最大堆,直到排序完成。

2024-09-25 20:32:51 2509 121

原创 【排序算法】插入排序_直接插入排序、希尔排序

它的工作原理类似于我们整理扑克牌的过程:一开始我们手里没有任何牌,每次从桌上取一张牌,将其插入到手中已排好序的牌中,直到手中所有的牌都排好序。● 空间复杂度:O(1),只需要一个额外的变量 key 来存储待插入的元素,因此插入排序的空间复杂度是常数级的。● 稳定性:插入排序是一个稳定的排序算法,意味着如果两个元素相等,它们的相对顺序不会在排序过程中改变。○ 最坏情况:O(n²),当数组是反序的,插入每个元素时都要遍历已排序部分的所有元素。插入排序通过不断将元素插入到已排序部分的合适位置,逐步形成有序数组。

2024-09-22 16:43:46 1548 103

原创 【机器学习】决策树与随机森林:模型对比与应用案例分析

决策树是一种树状结构的模型,用于解决分类和回归问题。模型通过递归地将数据集分割成更小的子集,最终到达叶子节点,每个叶子节点表示一个预测结果。决策树的每个节点代表对某个特征的测试,每个分支代表测试结果,而每个叶子节点则表示最终的预测类别或值。随机森林是一种集成学习方法,通过构建多个决策树并结合它们的预测结果来提高模型的准确性和鲁棒性。随机森林通过集成多个基学习器(通常是决策树),并利用投票机制(分类任务)或平均机制(回归任务)来生成最终的预测结果。

2024-09-05 10:05:11 4415 134

原创 深入理解OJ编程中的输入输出:11个经典题目详解与技巧分享及stringstream,sort详解

类是头文件的一部分,它继承自istream和ostream,这意味着你可以像使用cin和cout一样使用它来进行输入输出操作。可以通过传递一个自定义比较函数或函数对象来改变排序的规则。#include // 引入 sort 函数// 自定义比较函数,用于降序排序// 定义一个整数向量// 对向量进行降序排序// 输出排序后的向量// 打印每个元素return 0;除了使用标准库提供的函数对象外,C++还允许我们自定义比较函数对象。

2024-08-29 22:05:09 1902 121

原创 ACM模式下算法题输入输出攻略【C++】

在编程竞赛和笔试中,ACM模式是常见的要求,它需要我们编写完整的程序来处理输入输出。与平台上的核心代码模式不同,ACM模式通常要求我们处理标准输入输出并完整实现解决方案。核心代码模式只需要提交核心算法部分(通常是某一个函数),而ACM模式需要处理整个程序(包括main函数),包括输入输出和其他程序结构。在ACM模式中,链表、二叉树这些数据结构的定义也需要自己去定义,接下来就给出二者的定义、输入和输出。这里就直接给出代码了,想必大伙对数据结构都是了如指掌的。

2024-08-23 16:39:15 3909 109

原创 【机器学习】线性回归与逻辑回归的极致解析:从数学理论到实战案例

线性回归是一种统计方法,用于研究因变量(目标变量)与一个或多个自变量(特征变量)之间的线性关系。通过拟合一条直线,线性回归模型试图找到最优的线性函数,使得预测值与实际观测值之间的误差最小。这条拟合的直线被称为“回归线”。简单线性回归(Simple Linear Regression)是指只有一个自变量的情况,而多元线性回归(Multiple Linear Regression)则涉及多个自变量。

2024-08-20 15:32:39 3022 115

原创 【机器学习】全景指南:从基础概念到实战流程的全面解析

机器学习(Machine Learning, ML)是一门研究计算机如何从数据中自动学习的科学。通过大量的数据训练,机器学习模型能够发现数据中的模式和规律,从而进行预测或决策。简单来说,机器学习是计算机利用算法从数据中学习的一种方式,它使得计算机能够在没有显式编程的情况下进行任务处理。传统的编程方式通常需要开发者写出明确的规则来解决问题,而机器学习的核心在于自动从数据中提取这些规则。

2024-08-18 18:56:01 1771 106

原创 【C++ 秘籍】解锁 stack、queue 和 priority_queue 及容器适配器的神奇世界

容器适配器是一种在编程中常用的设计模式,它允许我们将一个类的接口转换成另一个客户希望的接口。具体到容器适配器,它们用于转换已有的序列式容器(如vector、deque和list)以满足特定场景的需求。通过封装和重新组合这些容器中的成员函数,容器适配器可以提供不同的接口,使得原本的序列容器在新的使用情境下更加适用和高效。举例来说,栈(stack)就是一种典型的容器适配器。

2024-08-12 10:34:36 2600 148

原创 【爱上C++】list用法详解、模拟实现

文档在这里→官方文档←list是可以在常数范围内( 时间复杂度为O(1) )在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代(双向迭代器)。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。

2024-07-22 12:11:04 5120 138

原创 【爱上C++】vector模拟实现

上一节我们讲了vector的基本使用,现在我们讲解vector的模拟实现,其中有三大重难点1.vector是如何进行设计与封装的2.迭代器失效问题3.memcpy,memmove导致的浅拷贝问题public:// Vector的迭代器是一个原生指针private:// 开始位置// 结束位置在 vector 类中,我们通常会使用_指针_来表示迭代器,因为指针天然支持指针算术运算和解引用操作,可以方便地遍历和访问元素。使用 typedef 定义迭代器类型可以使代码更加灵活和可维护。

2024-07-15 09:59:56 3370 145

原创 【爱上C++】vector用法详解

vector文档vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。

2024-07-08 10:30:57 15503 154

原创 【爱上C++】详解string类2:模拟实现、深浅拷贝

在上一篇文章中我们介绍了string类的基本使用,本篇文章我们将讲解string类一些常用的模拟实现,其中有很多细小的知识点值得我们深入学习。Let’s go!

2024-07-01 14:17:25 2116 120

原创 【爱上C++】万字详解string类1:经典常用接口、操作

string类是C++标准库中的一个类,用于处理字符串。它封装了字符数组(通常是char类型)的操作,提供了许多方便的方法来创建、修改、访问和操作字符串。使用string类可以简化字符串的编程工作,并减少常见的错误,如缓冲区溢出.在使用string类时需要包含头文件#include ,以及using namespace std;注意!不是C语言中是string.h官方参考文档上面是string类的文档介绍,在学习C++过程中,我们需要慢慢提高看英文文献,文档的能力。

2024-05-17 14:25:41 3766 142

原创 【爱上C++】详解类与对象1

C++类,类的实例化,作用域,大小的计算,this指针

2024-05-10 16:33:24 1696 126

原创 【爱上C++】函数模板 (1)

泛型编程概念,函数模板初阶,类模板。

2024-05-10 11:22:08 2255 96

空空如也

空空如也

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

TA关注的人

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