- 博客(37)
- 收藏
- 关注
原创 Leecode--反转字符串II
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。做完上一个反转字符串,看到这个题就相当于一个长度变化的字符串反转,感觉应该可以直接复用上一个的逻辑,然后加以修改。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。如果剩余字符少于 k 个,则将剩余字符全部反转。输入:s = “abcdefg”, k = 2。输入:s = “abcd”, k = 2。输出:“bacdfeg”s 仅由小写英文组成。
2025-10-12 21:51:51
194
原创 Leecode--hot100刷题计划-53. 最大子数组和
这个题首先想到的是一个固定长度的滑块,滑块长度在每次遍历之后长度加一,直到找到最大的和。能否外层循环控制区间大小,内层循环控制求和。果然,超时了,不过都能通过。如何定义这个滑块是个问题。
2025-10-12 21:51:20
83
原创 进程 线程八股思考
c++线程崩溃会导致进程退出影响其他线程的原因就在这,如果没有注册自定义的信号函数,会按照默认的信号函数,直接kill掉进程,而自己注册的函数可以加入进程恢复、进程安全退出等等操作。但是线程也有着许多缺点:由于线程共享地址空间,当一个线程由于内存泄漏等问题导致线程崩溃时,C++中的同一个进程中的其他线程也会一起崩溃,这是由于进程崩溃导致的。**因此解决线程崩溃的方法:**注册一个信号函数(非法访问内存的信号函数)让线程崩溃时能够处理这个信号函数逻辑,从而实现进程的恢复执行,保护其他线程的继续执行。
2025-10-12 21:50:37
111
原创 SQL 学习
在牛客上直接做SQL的编程题目,比直接看课,学语法有效的多,看十遍都不一定比自己思考打一遍熟练。所以建议连基础都不用学,直接去牛客刷题。直接去小林coding看图学。
2025-08-30 16:50:21
136
原创 Linux学习
先查询本机中的系统文件是否有与域名对应的ip地址,如果没有,就会联网进行查询,在DNS服务器中获取到对应的ip地址。相当于用主机名这种字符化的字符地址代替ip去访问,所以通过这些字符化的字符地址进行解析得到真实ip就是域名解析。在一些ip地址限制中,表示所有的ip的意思,如放行规则设置为0.0.0.0,表示允许任意ip访问。HOME目录是每一个用户在Linux系统中的专属目录,默认在/home/用户名。-options (选填): 命令的一些选项,可以通过选项控制命令的行为细节。
2025-08-25 10:39:45
555
原创 Qt C++后端 并发即时通讯软件项目(1)——TJChat
有两个QDialog :login和 registerDialog 每个界面h文件中声明一个自己的切换信号,用于事件触发,该信号会在mainWindow中绑定mainWindow中public slots中的槽函数,用于界面的切换。实现切换时,在mianWindow的h文件中声明所有需要切换的QDialog指针变量,在cpp文件中初始化,new一个。这里需要注意的是,不同版本的Qt会有不同,新版Qt的QDialog无法在主窗口的中心控件直接显示,除非修改为继承QWidget,这里就有些麻烦。
2025-08-25 10:35:14
448
原创 C++提高编程学习--STL
/ 自定义数据类型public:mAge = age;int mAge;// 存放对象// 创建数据Person p1("张三", 10);Person p2("李四", 20);Person p3("王五", 30);Person p4("赵六", 40);Person p5("孙七", 50);// 尾插法it!= v.end();it++)cout << "姓名:" << it->mName << " 年龄:" << it->mAge << endl;
2025-07-31 15:37:26
908
原创 C++核心编程学习-- 类和对象--多态
抽象类(父类)中的虚函数,也就是供继承的子类进行重写的函数,一般是没什么用处的,因为具体实现都是在子类中实现了。Animal类中只有一个非静态的成员函数,不占用对象的内存,是共有的,所以Animal类创建的对象相当于一个空对象,内存大小为1。回顾一下,只有非静态的成员变量才会占据对象的内存,其余都是公用的,对象的成员函数和成员变量是分开存储的。在析构时,不会调用子类中的析构函数,导致子类中如果有堆区属性不会被析构,导致内存泄漏。虚析构和纯虚析构都是对于父类中的析构函数而言的,虚析构和纯虚析构只能有一个。
2025-07-29 10:15:29
906
原创 C++核心编程学习-- 类和对象--继承
公有继承,父类中的访问权限不发生改变,但是子类无法访问父类私有的属性,但是依旧继承了父类的私有属性。因为子类继承了父类的属性,所以子类也可以通过作用域s.Base::m_A进行访问父类的同名属性。私有继承,父类中除了私有属性子类无法访问外,其余属性都变为子类的私有属性继承。当子类与父类出现同名的成员,如何通过子类对象,访问到子类或者父类中同名的数据?继承的子类中如果有父类的同名函数,子类会隐藏掉所有的父类同名函数。下面的继承结构: 羊继承动物,骆驼继承动物,草泥马继承羊和骆驼。
2025-07-27 21:21:57
797
原创 C++核心编程学习--对象特性--对象模型和this指针
返回值的方式相当于调用拷贝构造函数,拷贝到一个副本,临时的副本,返回的不是原来的对象p,第二个是返回的原来的对象p。静态或者非静态的成员函数,都是公用的,每个创建的对象都会访问(使用)同一个成员函数。在成员函数后面加一个const,修饰的是this指向,让指针指向的值也不可以修改。只有非静态的成员变量在对象中占据空间,其他的成员函数和静态成员变量都是共有的。this指针,使用this指针,this指针指向被调用的成员函数所属的对象。使用this指针,this指针指向被调用的成员函数所属的对象。
2025-07-26 16:55:21
382
原创 C++核心编程学习--对象特性--对象的初始化和清理
本文介绍了C++中构造函数和析构函数的基本概念、分类及调用方式,重点阐述了深拷贝与浅拷贝的区别。主要内容包括: 构造函数用于初始化对象,析构函数用于清理对象。编译器会自动调用这两个函数,若未定义则提供空实现。 构造函数分类: 按参数:无参构造(默认)和有参构造 按类型:普通构造和拷贝构造 调用方式:括号法、显式法和隐式转换法 拷贝构造函数的三种调用时机: 用已创建对象初始化新对象 值传递函数参数 值方式返回局部对象 构造函数调用规则: 默认提供无参构造、析构和拷贝构造 自定义构造函数后编译器不再提供相应构造
2025-07-24 20:31:50
609
原创 Leecode--反转字符串
本文介绍了两种原地反转字符串的方法。第一种方法通过判断字符串长度的奇偶性,分别处理奇数和偶数情况,使用双指针交换元素。第二种方法更为简洁,统一处理奇偶情况,只需遍历到字符串长度的一半即可完成交换。两种方法均满足原地修改和O(1)空间复杂度的要求,但第二种方法代码更简洁高效,通过计算s.size()/2自动处理奇偶差异,减少了不必要的条件判断。
2025-07-23 16:22:56
244
原创 C++核心编程学习4--类和对象--封装
C++面向对象的三大特性是封装、继承和多态。封装通过将属性和行为组合并控制访问权限来实现。示例展示了使用类封装数据(如圆类计算周长)和访问控制(public/private/protected权限)。struct默认为public,class默认为private。建议将成员属性设为私有,通过get/set方法控制访问。立方体案例演示了如何用全局函数和成员函数比较两个立方体是否相等。封装提高了代码安全性和可维护性。
2025-07-22 17:08:49
316
原创 C++核心编程学习3--函数高级
本文介绍了C++函数的高级特性:默认参数、占位参数和函数重载。默认参数允许在函数声明时指定形参的默认值,但需注意默认参数必须从右向左连续设置且声明和实现只能一处有默认值。占位参数可用空参数或默认值。函数重载要求同作用域下函数名相同且参数类型、个数或顺序不同,但返回值类型不同不能构成重载。特别指出引用参数和默认参数会影响重载解析,可能导致二义性,建议避免在重载函数中使用默认参数。文章通过代码示例展示了这些特性的具体使用方法和注意事项。
2025-07-22 15:22:34
288
原创 C++核心编程学习--引用
本文介绍了C++中引用的关键概念和使用方法。引用本质是指针常量,必须初始化且不可改变指向。函数返回引用时需注意:返回局部变量引用会导致悬垂引用,而返回static变量则可安全引用。引用返回值可作为左值直接修改原变量。常量引用(const &)可防止函数内误修改参数值,并能绑定临时值。在函数参数中使用常量引用是良好的编程实践,既能避免数据拷贝又能防止意外修改。文章通过代码示例详细展示了普通引用和常量引用的区别及适用场景。
2025-07-22 10:50:02
296
原创 黑马Qt学习(九)翻金币项目实现及项目打包
本文将Qt项目打包发布和翻金币游戏开发的关键步骤进行总结: 项目打包发布: 从debug切换到release模式生成exe文件 使用windeployqt工具自动收集依赖dll 可进一步用HM NIS Edit打包成独立exe 游戏开发要点: 菜单退出功能实现 背景图片设置 按钮动画特效 场景切换与延时处理 金币翻转动画实现(8帧图片轮播) 二维数组维护游戏状态 胜利条件判断与动画效果 音效添加与播放控制 界面位置保持技巧 常见问题解决: 初始化标志位避免按钮失灵 胜利瞬间按钮屏蔽 动画播放与游戏状态同步控
2025-07-21 16:41:03
681
原创 黑马Qt学习(八)绘画事件和文件读写
本文介绍了Qt中绘图设备和文件操作的相关内容。在绘图部分,讲解了如何使用QPainter在窗口控件上绘图,以及QPixmap、QImage、QPicture三种绘图设备的特点和使用方法。其中QPicture可以记录和重现绘图指令。在文件操作部分,展示了如何通过QFileDialog选择文件路径,使用QFile读取和写入文本文件内容,并介绍了QFileInfo获取文件元数据信息的方法。文章提供了完整的代码示例,包括绘图实现、文件读写操作以及文件信息获取等实用功能。
2025-07-20 15:20:22
354
原创 黑马Qt学习(七)事件
本文介绍了Qt中鼠标事件和定时器事件的处理方法。在鼠标事件部分,讲解了如何通过继承QLabel类并重写enterEvent、leaveEvent等虚函数来实现鼠标进入、离开、移动和点击的事件响应,包括获取鼠标坐标位置和按键状态。在定时器事件部分,展示了如何使用startTimer()启动定时器,并通过重写timerEvent()函数实现定时触发功能,同时介绍了处理多个定时器的方法。文章还特别强调了自定义控件时需要注意虚函数重写规则、头文件包含以及鼠标追踪设置等细节,并提供了完整的代码示例。
2025-07-19 16:12:56
659
原创 黑马Qt学习(六)登录窗口布局与ui控件
摘要:本文介绍了Qt界面开发中的常用控件布局与使用方法。包括Widget布局技巧(弹簧布局、栅格布局)、密码输入框设置(noecho/passwordecho模式)、按钮资源导入与图标文字排列方式(textbesideicon)。详细讲解了单选按钮分组、复选框状态检测(全选2/半选1/不选0)及其信号绑定方法。同时介绍了ListWidget、TreeWidget和TableWidget的用法,包括添加项目、设置对齐方式和构建树形结构等操作。文中配有详细代码示例和效果截图,帮助开发者快速掌握Qt控件布局与交互
2025-07-18 17:16:20
910
原创 黑马Qt学习(五)对话框
本文介绍了Qt中常用对话框的实现方法,主要包括: 模态/非模态对话框的创建方式及区别,重点讲解了非模态对话框的内存管理问题; 消息对话框(QMessageBox)的使用,包括critical、question等类型,以及如何获取用户选择结果; 颜色对话框(QColorDialog)获取RGB值; 文件对话框(QFileDialog)实现文件选择功能; 字体对话框(QFontDialog)获取用户选择的字体属性。通过代码示例展示了各对话框的参数设置和使用场景,为Qt应用程序开发提供了实用的交互解决方案。
2025-07-14 21:32:58
286
原创 黑马Qt学习(四)资源文件
本文介绍了Qt开发中的资源文件使用和UI设计技巧。主要内容包括:1)通过创建Qt资源文件(.qrv)解决图片路径问题,使用":/前缀/文件名"格式加载资源;2)UI设计技巧:右键创建工具栏、菜单项中文编辑、action拖拽复用、分隔符添加;3)DockWidget浮动窗口属性设置;4)代码示例展示资源文件调用方式。这些方法可解决程序打包后资源加载问题,并提高UI设计效率。
2025-07-08 10:50:33
281
原创 黑马Qt学习(三)QMainWindow
本文介绍了Qt中QMainWindow的分区布局及使用方法。窗口分为菜单栏、工具栏、浮动控件、中心控件和状态栏。其中菜单栏、中心控件和状态栏只能有一个,用set方法添加;工具栏等可添加多个控件,用add方法。代码示例展示了如何创建菜单栏、工具栏和状态栏,并添加菜单项、按钮等控件。还演示了工具栏的停靠区域设置、浮动和移动功能。通过图片展示了窗口布局效果,包括菜单栏的文件/编辑选项、左侧工具栏和底部状态栏。
2025-07-07 21:53:30
123
原创 黑马Qt学习(二)自定义的信号与槽
本文介绍了Qt信号槽机制的实现过程:1)创建信号发送者(Teacher)和接收者(Student)类,发送者只需声明信号函数(hungry),接收者需声明并实现槽函数(treated);2)在窗口类中实例化这两个对象;3)使用connect连接信号与槽;4)通过emit触发信号。关键点在于:信号只需声明,槽函数需实现;信号槽通过connect绑定;使用emit发送信号时自动调用槽函数。示例实现了"下课触发老师饥饿信号,学生响应请吃饭"的功能,展示了Qt对象间通信的基本模式。
2025-07-04 17:33:47
316
1
原创 黑马QT学习(一)Qt基础 按钮 对象树 信号与槽
摘要:Qt是一个跨平台C++ GUI框架,提供了QWidget、QMainWindow和QDialog等窗口类。文章介绍了对象树机制,子对象会随父对象自动释放,以及窗口坐标系定义。通过代码示例展示了按钮创建、父子关系设置和信号槽机制(connect函数),体现了Qt松耦合特性。程序结构包含main函数创建QApplication、窗口显示(show)和事件循环(exec)。头文件使用Q_OBJECT宏支持信号槽功能,并防止重复包含。
2025-07-03 22:26:02
174
原创 数据结构与算法学习笔记
本文介绍了数据结构的基本概念和分类。数据结构分为线性结构(如线性表)和非线性结构(如树和图)。文章详细说明了数据元素、数据项、数据对象等术语,并阐述了四种基本存储结构:顺序存储、链式存储、索引存储和散列存储。此外,还介绍了数据类型、抽象数据类型以及算法的特性和效率分析方法。数据结构是研究计算机操作对象及其关系的学科,在程序设计中具有重要意义。
2025-06-29 11:38:47
840
原创 黑马C++学习笔记——通讯录管理系统(2)项目实现
摘要 本文展示了一个基于C++的通讯录管理系统实现。系统采用结构体存储联系人信息,包含姓名、性别、年龄和电话号码等字段。主要功能包括: 菜单界面显示(添加、显示、删除、查找、修改、清空联系人) 联系人添加功能 联系人显示功能 联系人删除功能(通过查找索引后移动数组元素实现) 联系人查找功能(按姓名查找) 系统操作控制(清屏和暂停功能) 程序使用while循环保持运行,通过switch-case结构处理用户选择,实现了基本的通讯录管理功能。系统采用模块化设计,各功能封装为独立函数,便于维护和扩展。
2025-06-26 16:58:03
220
原创 黑马C++学习笔记——通讯录管理系统(1)结构体学习
研究生期间专注论文导致代码生疏,秋招前决定通过简单项目恢复编程能力。选择从通讯录管理系统入手,先进行结构体预热学习。示例代码展示了嵌套结构体(Teacher包含Student数组)的用法,包括成员变量访问、数组遍历和函数封装。通过Teacher和Student结构体的定义与操作,为后续管理系统开发打下基础。代码涉及字符串拼接、数组指针传递等基础知识点,适合作为编程能力恢复的入门练习。
2025-06-24 14:57:54
228
原创 经典网络骨架:Backbone 学习笔记(一)——卷积网络的基本构成
当前的物体检测算法虽然各不相同,但第一步通常是利用卷积神经网络处理输入图像,生成深层的特征图,然后再利用各种算法完成区域生成与损失计算,这部分卷积神经网络是整个检测算法的“骨架”,也被称为Backbone。
2024-07-25 17:52:23
2282
原创 论文精读——ResNet (Deep Residual Learning for Image Recognition)残差网络
分别进行不同深度网络的训练和测试发现更深层的网络更易出现精度饱和后迅速降级的现象,我们称这种现象为——**退化**,并且发现退化产生的原因不是过度拟合,**而是层数变多引起的训练误差更高,随之测试误差也会更高**。
2024-07-17 20:41:09
3882
1
转载 LSTM网络学习笔记
Long ShortTerm 网络——一般就叫做LSTM——是一种RNN特殊的类型,可以学习长期依赖信息。当然,LSTM和基线RNN并没有特别大的结构不同,但是它们用了不同的函数来计算隐状态。
2024-07-10 15:41:54
145
原创 BIRCH(平衡迭代规约和层次聚类)学习笔记
是新的CF节点中的SS值。这些计算方式保证了在CF节点合并时,能够正确地更新节点的统计信息。体现了CF树很好的性质——线性关系。因此,在这个CF中,样本点的各个特征维度的平方和SS为244。是新的CF节点中的样本数量,是新的CF节点中的LS值,
2024-04-13 16:57:24
1094
1
原创 Python基础学习看这个就够了(未完结)
*Python学习笔记用Python实现伪随机数重现*`import random //Python需要引入模块函数x = random.getstate()random.setstate(x) //在此之前先生成一部分随机数(省)random.randint(1,10)8random.randint(1,10)9random.randint(1,10)6random.randint(1,10)8ra
2021-11-07 11:32:24
276
10
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅