- 博客(34)
- 收藏
- 关注
原创 详解Asio网络编程
使用Asio使用io_context驱动事件循环使用async_*方法进行异步 I/O使用回调函数处理完成事件多线程处理高并发欢迎补充讨论。
2025-03-31 15:25:39
306
原创 详解shared_from_this
是 C++ 标准库 () 提供的一个机制,允许类在不创建新的的情况下,获取指向自身的,从而安全地管理对象的共享所有权。避免引发。确保对象生命周期,在回调、事件管理等场景中常用。必须确保对象已由管理,否则调用会导致运行时错误。在 C++ 中,是一个强大而易踩坑的工具,正确使用它可以防止内存泄漏和未定义行为。
2025-03-30 16:58:27
232
原创 设计模式-单例模式
在软件开发中,某些对象只需要一个实例,且该实例应该在整个系统范围内被共享。这种需求催生了单例模式(Singleton Pattern)。单例模式是一种创建型设计模式,它确保一个类在整个应用程序的生命周期中只有一个实例,并提供一个全局访问点。
2025-03-30 15:59:13
663
原创 C++智能指针详解
在计算机编程中,特别是使用C++语言时,内存管理一直是一个复杂且容易出错的任务。程序员需要手动分配和释放内存,稍有不慎就可能导致内存泄漏或悬挂指针问题,这些问题不仅会影响程序的性能,还可能引发严重的错误甚至安全漏洞。为了简化内存管理并减少这些潜在的问题,C++标准库引入了“智能指针”(Smart Pointer)。顾名思义,智能指针是一种封装了原始指针的对象,它能够自动管理指针的生命周期。这意味着程序员不需要手动分配和释放内存,智能指针会自动处理这些任务,确保资源得到合理使用。
2025-03-29 19:43:47
810
原创 基于 Qt / HTTP/JSON 的智能天气预报系统测试报告
随着人们对生活品质要求的提高,天气预报已成为日常生活的重要组成部分。通过准确的天气信息,用户可以更好地规划出行、穿衣等日常活动。本项目旨在开发一个基于 Qt 框架的天气预报系统,实现实时天气数据的获取、展示以及历史天气数据的查询功能。
2025-03-28 21:43:14
923
原创 使用 Qt 处理 JSON 数据:从入门到精通
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也适合机器解析和生成。它基于 JavaScript 对象语法,并且独立于语言,几乎在所有现代编程语言中都有实现。JSON 的主要特点包括:易读性和简洁性。支持复杂的结构,如对象、数组、字符串、数字、布尔值等。轻量级,解析速度快。通过上述步骤,我们已经成功地生成并解析了 JSON 数据。
2025-03-28 20:33:51
804
原创 详解Http:在QT中使用Http协议
HTTP是Web开发中的核心协议,而Qt提供了强大的网络库来简化HTTP通信。通过和相关类,你可以轻松发送请求、处理响应以及解析数据。无论是简单的GET请求还是复杂的POST操作,Qt都能提供高效且可靠的解决方案。希望这篇帖子能帮助大家更好地理解如何在Qt中使用HTTP!如果有任何问题,请随时讨论。
2025-03-28 17:53:14
902
原创 [特殊字符] C++ 常见 Socket 错误与优化指南
问题优化方案端口占用允许端口快速复用Socket超时和限制超时时间单线程服务器阻塞使用多线程(std::thread)或epoll/select部分发送/接收send_all()和recv_all()确保完整数据传输欢迎补充问题!
2025-03-23 17:22:35
348
1
原创 深入解析 Socket:网络通信的桥梁
Socket?Socket本质上是一个端点(endpoint),用于在不同设备或进程之间进行数据传输。可以把它想象成电话插孔,只要两端正确连接,就可以通过它进行通信。Socket 依赖IP 地址 + 端口号IP 地址:定位计算机(类似于电话号码)端口号:区分不同进程(类似于电话分机)
2025-03-23 17:13:21
670
原创 深入解析 TCP:可靠传输的基石
你有没有想过,当你刷微博、看视频、玩游戏时,数据是如何稳定地从服务器传输到你的设备上的?这背后有个关键角色——!
2025-03-22 17:39:07
717
原创 基于TCP/QT/C++的网络调试助手测试报告
在网络应用开发和嵌入式系统调试过程中,开发者经常需要模拟客户端-服务器交互,以验证数据传输的正确性和稳定性。然而,传统的网络调试工具通常难以同时支持多个客户端的管理,或者缺乏灵活的调试能力。因此,本项目基于 Qt 框架实现了一款功能强大、易于使用的网络调试助手,旨在提高开发和测试效率。类别功能API/方法TcpServer监听TcpServer连接TcpServer关闭TcpServer信号新连接TcpScoket连接TcpScoket发送TcpScoket接收。
2025-03-22 17:26:51
750
原创 ‘telnet‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件
Telnet(远程登录)是一种用于通过互联网连接到远程计算机的协议。它允许用户在自己的设备上访问并控制另一台计算机,就像直接使用该计算机一样。
2025-03-20 18:18:47
390
原创 Leetcode349:两个数组的交集
以数组1中的值为键值,给对应位置置1,以数组2中的值为键值,给对应位置减1,如果减1后为0,则表示数组1中存在该值。输出结果中的每个元素一定是。[4,9] 也是可通过的。
2024-12-10 21:22:00
207
原创 Leetcode224:基本计算器
因为题中不涉及乘法除法操作,所以分情况把括号拆开,逐个计算,仅使用一个符号栈即可。注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如。,请你实现一个基本计算器来计算并返回它的值。给你一个字符串表达式。
2024-11-06 21:22:08
148
原创 Leetcode394:字符串解码
使用两个栈,分别存放数字和字符串,当遇到数字时,转换为int型,存放到num,遇到字符时,存放到res中,遇到左括号时,将num、res分别压栈,遇到右括号时,数字栈出栈k,字符栈出栈并循环k次。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数。给定一个经过编码的字符串,返回它解码后的字符串。由小写英文字母、数字和方括号。中所有整数的取值范围为。,表示其中方括号内部的。
2024-11-06 20:12:51
173
原创 Leetcode2:两数相加
要考虑进位的情况,容易忽略的是处理最后的进位问题,在写循环条件时要考虑进位。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。的链表,表示两个非负的整数。它们每位数字都是按照。请你将两个数相加,并以相同形式返回一个表示和的链表。的方式存储的,并且每个节点只能存储。题目数据保证列表表示的数字不含前导零。每个链表中的节点数在范围。
2024-11-05 19:59:44
289
原创 Leetcode150:逆波兰表达式求值
使用栈操作,遍历数组,遇到数字入栈,遇到运算符,出栈两个数字,进行运算,将结果再入栈,值得注意的是,入栈需要将数字转换为整型,数组中存储的是string类型。该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6。该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9。逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。每个操作数(运算对象)都可以是一个整数或者另一个表达式。返回一个表示表达式值的整数。输入是一个根据逆波兰表示法表示的算术表达式。
2024-11-05 17:28:00
346
原创 Leetcode155:最小栈
-> 返回 -3.minStack.getMin();--> 返回 -2.minStack.top();操作,并能在常数时间内检索到最小元素的栈。使用一个辅助栈,在辅助栈栈顶记录最小元素。将元素val推入堆栈。获取堆栈中的最小元素。删除堆栈顶部的元素。获取堆栈顶部的元素。
2024-11-05 17:11:30
335
原创 Leetcode328:奇偶链表
将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。的时间复杂度下解决这个问题。
2024-11-04 17:09:49
307
原创 Leetcode21:合并两个有序链表
新建链表节点,使用三个指针,两个指针用于判断两个链表值的大小,另一个指针控制新链表。新链表是通过拼接给定的两个链表的所有节点组成的。将两个升序链表合并为一个新的。两个链表的节点数目范围是。还可以使用递归的思想。
2024-11-04 16:22:28
502
原创 Leetcode19:删除链表的倒数第N个结点
递归的思想,定义一个计时器,当等于n时返回子链表的下一个,否则返回子链表头。使用快慢指针,快指针比慢指针多走n步。注意,计时器要定义在递归函数外面。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。
2024-11-01 20:32:35
347
原创 Leetcode24:两两交换链表中的节点
第二种方法使用递归,首先判断递归终止的条件,当前节点为空或当前节点指向空时,递归退出,接下来找返回值是什么,返回的是处理过的子链表的头节点,最后思考单次的操作过程,同样以1234为例,假设后面已经处理好了,当前的顺序是1243,则2->1,1->4。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。链表中节点的数目在范围。
2024-10-24 22:11:28
252
原创 Leetcode88:合并两个有序数组
可以直接合并数组然后使用快排排序,也可以使用双指针的思想,比较两个数组当前指针位置的大小,如果从左到右正向排,会覆盖nums1中前面的元素,我们可以倒序,从右往左排,nums1中后n个元素为0,从后往前不会覆盖前面的元素,使用三个指针,第一个指向nums1前m个元素的末尾,即指向nums1[m-1],第二个指针指向nums2[n-1],第三个指针指向nums1[m+n-1],根据前两个指针位置的大小,判断第三个指针所指元素该填入哪个值。,5,6] ,其中斜体加粗标注的为 nums1 中的元素。
2024-10-22 21:51:16
318
原创 Leetcode66:加一
考虑几种情况,末尾不为9时,不需要进位,直接加一;全为9时,数组需要扩张,创建新数组,数组长度比原来大一个,首位置1,其余位默认为0;最后几位为9时,当前为置0,前一位加一。你可以假设除了整数 0 之外,这个整数不会以零开头。最高位数字存放在数组的首位, 数组中每个元素只存储。数组所表示的非负整数,在该数的基础上加一。加 1 得到了 9 + 1 = 10。因此,结果应该是 [1,0]。输入数组表示数字 4321。输入数组表示数字 123。输入数组表示数字 9。
2024-10-22 21:16:14
205
原创 Leetcode27:移除元素
与Leetcode283:移动零相似,不同的是无需处理k个之后的元素,同意使用双指针记录,一个用来遍历数组,判断当前元素是否为val,另一个记录当前前k个处理后数组的位置,最后返回k。你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。k用来记录满足要求处理后数组的位置,最后返回k,数组的前。中的前两个元素均为 2。
2024-10-22 20:25:39
703
原创 Leetcode283:移动零
k用来记录处理完的最后一个非零元素的新位置,即非零元素的个数,用来确定需要从哪个位置开始置零操作。移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。输入:nums=[0,1,0,3,12]输出:nums=[1,3,12,0,0],编写一个函数将所有。输入:nums=[0]输出:nums=[0]
2024-10-18 19:23:13
180
1
原创 Leetcode26:删除有序数组中的重复项
观察数组特点,是有序数组,重复数组是相邻的,可以使用双指针的思想,一个指针记录唯一元素的位置,一个指针查找与当前元素不同的元素位置。解释:函数应该返回的新长度5,并且原数组nums的前五个元素被修改为0,1,2,3,4。不需要考虑数组中超出新长度后面的元素。解释:函数应该返回的新长度2,并且原数组nums的前两个元素被修改为1,2。不需要考虑数组中超出新长度后面的元素。输入:nums=[0,0,1,1,1,2,2,3,3,4]输出:5,nums=[0,1,2,3,4]输出:2,nums=[1,2,_]
2024-10-18 17:43:10
216
原创 蓝桥杯 算法训练最大最小公倍数 Java
问题描述已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。输入格式输入一个正整数N。输出格式输出一个整数,表示你找到的最小公倍数。样例输入9样例输出504数据规模与约定1 <= N <= 106。先判断N的奇偶,若为奇数,选最大的三位数,N,N-1,N-2;若为偶数,N,N-2必有公约数2,则N,N-1,N-2最小公倍数不是三数相乘也不为最大,为偶数时,又可分为N是否能被3整除,当输入N=8时,为偶数,考虑选择8,7,
2022-01-21 21:43:22
190
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人