![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
是小峰呀
一起学QT
展开
-
QT实现TCP与UDP的消息收发
QT的TCP与UDP通信1.TCPTCP通信是基于握手实现的,数据传输相对较为可靠,但实时性较UDP差一些。2.UDPUDP通信是基于不可靠实现的,数据传输没有TCP那么靠谱,尽最大能力交付,实时性较好。两者各有优点和不足,废话不多说,上代码下面是重点工程的结构如下。工程中的UI文件如下1.在QT的工程文件[.pro]里面加入network,如下所示。整个工程文件就改变这一处,其它代码为自动生成,此处不贴出占据版面QT += core gui network2.wid原创 2022-02-28 15:47:44 · 4186 阅读 · 0 评论 -
QT实现北斗GGA数据的自动模拟生成和解析
本文使用定时器、串口,随机数等方式进行组合,实现北斗GGA数据的模拟生成,自动发送与数据解析。本文的所有代码均使用C++ QT完成,QT版本号位5.9.9,项目构建使用DeskTop Qt 5.99 MinGW 32bit完成,数据采用DB9串口传输,整个项目在上述环境下亲测可用。整个文档的压缩包下载地址如下:https://download.csdn.net/download/weixin_43552197/20399350...原创 2021-07-22 16:48:32 · 1392 阅读 · 0 评论 -
快速排序的非递归与递归方法
**快速排序(Quick Sort)**是对冒泡排序的一种改进。他的基本思想是:选取一个哨兵元素,将剩下的元素依次与哨兵元素比较大小,通过一次排序,将整体元素分割为两个部分,其中一部分均比哨兵元素小,位于哨兵的左侧,另一部分均比哨兵元素大,位于哨兵的右侧。其排序的过程如下图所示,图(a)是一趟排序的过程,图(b)是一次完整排序的全过程。排序算法可以写成递归排序和非递归排序两种,具体的实现代码如下所示。#include<iostream>#include<vector>#i原创 2021-03-28 11:58:10 · 185 阅读 · 0 评论 -
Mat操作中的几种拷贝方式
/*Mat是一个具有两个数据部分的类:矩阵头和指向包含像素值的矩阵的指针*/Mat image;// 方式一:image1的创建,只创建了头部,与原来的image共享数据域部分Mat image1 = image;// 方式二:image2完全拷贝image的所有信息Mat image2 = image.clone();// 方式三:拷贝image的数据区到image3中,在拷贝数据前会有一步:image1.create(this->size , this->type)Mat原创 2020-12-19 16:10:18 · 1075 阅读 · 1 评论 -
找数组中不重复元素的和(回溯算法)
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,所求解集为:[[1, 7],[1, 2, 5],[2, 6],[1, 1, 6]]示例 2:输入: candidate原创 2020-11-23 15:51:24 · 612 阅读 · 0 评论 -
面试题目,搭配最优出售方案
题目描述服装店新进了a条领带,b条裤子,c个帽子,d件衬衫,现在要把这些搭配起来售卖。有三种搭配方式,一条领带和一件衬衫,一条裤子和一件村衫,一个帽子和一件衬衫。卖出一套领带加村衫可以得到e元,卖出一套裤子加衬衫可以得到元,卖出一套帽子加衬衫可以得到g元。现在你需要输出最大的获利方式。样例输入2 3 4 5 6 7 8样例输出39提示4个帽子加4件衬衫获利32元,1条裤子加1件衬衫获利7元,一共得到39元。开始拿到题目的时候看到有数的组合,本来想用vector<map<int,i原创 2020-09-28 15:47:50 · 433 阅读 · 0 评论 -
暴力-扫描-动态规划实现最大子数组和的变形问题(面试题)
题目描述:小华喜欢字母E,讨厌字母F。在小华生日时,小右送了小华一个仅包含字母E和F的字符串,小华想从中选出一个包含字母E数量与字母F数量之差最大的子串。*子串:从字符串前面连续删去若干个字符,从后面连续删去若干个字符剩下的字符串(也可以一个都不删),例如abcab是fabcab的子串,而不是abcad的子串。我们将空串看作所有字符串的串。话不多说。下面直接上代码#pragma once#include<iostream>#include<string>using n原创 2020-09-27 22:14:10 · 88 阅读 · 0 评论 -
OpenCV中Point类和常见的vector容器类型使用方法
一:Point类Point是一个模板类,其模板类的定义如下template<typename _Tp> class Point_{public: typedef _Tp value_type; //! default constructor Point_(); Point_(_Tp _x, _Tp _y); Point_(const Point_& pt); Point_(const Size_<_Tp>&原创 2020-09-21 21:47:50 · 5698 阅读 · 0 评论 -
回溯法解决数独问题
题目描述编写一个程序,通过填充空格来解决数独问题。一个数独的解法需遵循如下规则:数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。空白格用 ‘.’ 表示。提示:给定的数独序列只包含数字 1-9 和字符 ‘.’ 。你可以假设给定的数独只有唯一解。给定数独永远是 9x9 形式的。题目分析方法一:回溯法需要额外开辟空间以及作用:创建3*9个哈希表存放每一行和列以及3x3方格里面的数据基本的处理思路原创 2020-09-18 19:55:34 · 3691 阅读 · 0 评论 -
C++字符串的排列(数组内元素的全排列)
题目描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。题目分析:如下图,第一种情况(ABB)是存在字符重复时,全排列出现重复的例子。第二种情况(ABC)是不存在字符串重复时的情况,全排列的例子。因为第二种情况更加明显,因为以不存在重复时进行说明算法的思路。首先看与ABC相连的(A、B、C),实际上可以看作后面的字符与第一个字符(A)的交换,此时第一个字符的位原创 2020-09-12 21:09:42 · 2813 阅读 · 0 评论 -
复杂链表的深拷贝
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)看完题目应该很混乱,甚至还有点看不懂。题目解析看上面的图片,题目中说的复杂链表表示,一个节点有1-2个指针,除了指向下一个节点的指针外,还可能存在一个random指针,这个指针指向该链表中某一个节点的位置。如图所示,A节点,除了一个next指针指向B之外,还有原创 2020-09-06 16:04:18 · 296 阅读 · 0 评论 -
在二叉树种找出路径和与给定数字相同的所有路径
题目描述输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。题目解析(1)要找到符合条件的路径,首先需要遍历整个二叉树,在遍历过程中使用一个一维数组记录当前走过的所有节点的值,并用给定的值不断减去走过的节点值。(2)当走到叶节点时判断给定的值是否为0,如果为0,保存到二维数组。(3)当遇到不符合条件的值时进行回溯,回溯时注意:回溯需要删除一维数组中最后一个值,并且需要对给定的值加上删除的一维数组原创 2020-09-03 22:12:55 · 322 阅读 · 0 评论 -
数组中的荷兰旗问题
题目描述给定一个整数数组,给定一个值K,这个值在原数组中一定存在,要求把数组中小于K的元素放到数组的左边,大于K的元素放到数组的右边,等于K的元素放到数组的中间,最终返回一个整数数组,其中只有两个值,分别是等于K的数组部分的左右两个下标值。例如,给定数组:[2, 3, 1, 9, 7, 6, 1, 4, 5],给定一个值4,那么经过处理原数组可能得一种情况是:[2, 3, 1, 1, 4, 9, 7, 6, 5],需要注意的是,小于4的部分不需要有序,大于4的部分也不需要有序,返回等于4部分的左右两个下转载 2020-08-06 22:49:49 · 154 阅读 · 0 评论 -
比较sort和nth_element两个函数的不同
相同点:sort()和nth_element()都包含在#include<algorithm>头文件中sort()函数原型:void sort (RandomAccessIterator begin, RandomAccessIterator end, Compare comp);begin:表示排序的起始位置(迭代器类型)end:表示排序的结束位置(迭代器类型)comp:表示排序的类型(升序或者降序)升序排序不传入第三个参数,默认升序排序。程序和运行结果如下:#include原创 2020-08-06 19:02:10 · 558 阅读 · 0 评论 -
链表合并的两种方法
题目描述将两个递增的链表合并为一个递增的链表方法一:递归法递归的思想自上而下,每次取出一个最小的节点指向递归找出的下一个最小的节点。找的时候自上而下,但是结果的合并是自下而上(递归过程呈"V"字形),因此只需将最后一个节点返回就是整个链表的头节点。#include<iostream>#include<algorithm>using namespace std;struct ListNode { int val; struct ListNode *next;原创 2020-08-05 15:57:52 · 6663 阅读 · 0 评论 -
C++中的优先队列(Priority_queue)
Priority_queue与queueq用法类似,同样支持以下操作:1.push()。将元素进队2.top()。获取队头元素3.pop()。删除队头元素4.empty()。队列是否为空5.size()。队列的长度对于Priority_queue原函数的如下所示priority_queue<Type, Container, Functional>Type为数据类型,比如int、double、string等等。Container表示容器类型,例如vector、deque等等。原创 2020-08-03 23:14:13 · 427 阅读 · 0 评论 -
C++中的全排列函数next_permutation和prev_permutation
全排列涉及两个函数:prev_permutation (1)next_permutation (2)#include<algorithm>//特别注意函数参数是迭代器类型,使用时不要写错bool prev_permutation(iterator begin,iterator end);bool next_permutation(iterator begin,iterator end);这两个函数的功能一样,都是执行全排列。但是区别在于(1)求的是排列的上一个排列,原创 2020-08-01 21:53:16 · 439 阅读 · 0 评论 -
把正整数数组里面的数字组合成最小的数字
题目描述把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{7,302,12},则打印出这三个数字能排成的最小数字为123027。题目分析:需要打印出三个数字可以排成的最小数字,表明算法涉及全排列。算法设计:step 1: 根据给定的数组长度(length)初始化一个一维向量,向量内的值初始化为0到length-1,作为给定数组的全排列索引。step 2: 将全排列的多种次序存放到一个二维向量里面step 3: 根据全排列索引,使用to_string函数将每原创 2020-08-01 21:09:34 · 1185 阅读 · 0 评论 -
计算第N个丑数(Ugly Number)
题目描述包含质因子2、3和5的数称作丑数。例如6、8都是丑数,但14不是,因为它包含质因子7。习惯上我们把1当做是第一个丑数。按从小到大的顺序求第N个丑数题目分析:质因子包含2、3、5三个中任意一个或者多个;而且题目明确给出1为最小的丑数;因此可以从1开始,对后面的数依次乘以2、3、5.比如一个数组,最开始只有一个元素1,建立三个索引p2、p3、p5,分别记录乘2、乘3、乘5的位置,然后将1分别乘以2、3、5,取其中最小的一个数,作为丑数填入数组中,依次循环,直至取到第N个数。这三个索引是关原创 2020-08-01 17:40:43 · 949 阅读 · 0 评论 -
归并排序计算数组中的逆序对
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于%100的数据,size<=2*10^5示例:输入1,2,3,4,5,6,7,0输出7先来一种错误的示范:(错原创 2020-07-29 21:02:28 · 190 阅读 · 0 评论 -
判断一棵二叉树是否为平衡二叉树
题目描述对输入的一棵树,判断是否为二叉树。step1:对给定二叉树的所有节点进行遍历step2:将每一个节点都作为根节点,判断其左右孩子的深度step3:使用unordered_map记录下每个节点的深度,最后遍历每个节点,判断左右子树深度之差是否小于等于1代码如下(这个直接运行可能有些问题,我没有用编译器测试,直接网页编译器过了我就拿过来了,关于需要修改的我在注释中指出)//编译器需要包含的头文件,在这里同样给出#include<iostream>#include<un原创 2020-07-27 21:03:34 · 399 阅读 · 0 评论 -
c++实现测试用例分数计算问题
这是国外某个网站上的一个题目,觉得挺有意思的,下面分享到本篇博客中,并附上c++做法。目前题目中所给出的测试用例,和个人编写的测试用例均通过。如果有更好的方法请在评论区指出,我会将尽力将该方法呈现后一并附上。下面是题目描述,可以自行翻译,我的英文水平有限,在此不做翻译工作。代码如下:#include<iostream>#include<vector>#include<algorithm>#include<unordered_map>#incl原创 2020-07-26 15:59:51 · 668 阅读 · 0 评论 -
单词序列的反转
题目描述将给定的字符串序列反转。示例输入:student. a am I示例输出:I am a student.题目分析:字符串的反转并不是真正意义上的反转,在反转的同时,不能将单词倒置。对字符串考虑倒序输出,正好符合栈的出入规则,因此选用栈进行操作。step.1首先,需要以空格为标记将单词分开,但是会出现一个问题,最后一个字母后面没有空格,如果不加入条件限定,会直接丢失最后一个单词。选用解决办法,少一个空格,我们首先在原字符串多加一个空格,最后将栈顶元素,也就是多出的空格删除即可。s原创 2020-07-24 16:49:47 · 234 阅读 · 0 评论 -
使用队列解决约瑟夫环问题
题目描述:首先,让小朋友们围成一个大圈。然后,随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,请你试着想下,哪个小朋友最后可以不表演。(注:小朋友的编号是从0到n-1)如果没有小朋友,返回-1本文使用队列实现这个问题,实现的过程演示如下图所示。假设一共七个小朋友,每次数到3的倍数就报数开始的时候,编号0和1的小朋友,都不是3的倍数,不用报数,因此依次原创 2020-07-23 20:06:59 · 3680 阅读 · 0 评论 -
正则表达式的匹配计算
题目描述请实现一个函数用来匹配包括.和✳的正则表达式。模式中的字符’.'表示任意一个字符,而✳表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab✳ac✳a"匹配,但是与"aa.a"和"ab✳a"均不匹配题意解析可能这个题目比较绕,直接看不容易看懂,下面我先把题目的意思分析一下,捋清思路。node1:字符串是被动对象,要用来与模板进行匹配node2:正则表达式在题目中给出了.和✳,.只匹配一个字符,且可以充当任原创 2020-07-19 22:13:06 · 662 阅读 · 0 评论 -
vector详细用法介绍(附上实验代码)
c++中vector用途广泛,其使用方法一般相对较为固定,本博客主要详细的介绍vector常用的定义以及使用方法。从代码中理解一维和二维向量的各种定义与初始化,以及向量中常用的一些方法。#include<iostream>#include<vector>#include<algorithm>using namespace std;void testVec() { /*一维向量的定义、初始化、以及常用操作*/ //vector<type> i原创 2020-07-19 21:15:57 · 770 阅读 · 0 评论 -
使用OpenCV4.1对连通域的计数和面积计算
connectedComponentsWithStats函数的应用上一篇文章讲了connectedComponebts函数的使用,该函数功能有限,无法进行计数和区域标记计算,但是OpenCV提供了一个函数可以对连通域进行计数和区域的面积计算,该函数为connectedComponentsWithStats。首先看一下函数介绍connectedComponentsWithStats( InputArray image, OutputArray labels, O原创 2020-07-19 15:16:32 · 5651 阅读 · 0 评论 -
使用Mat构造一个掩膜矩阵,计算像素间的三种距离
在c++OpenCV 4中Mat的矩阵运算,极大的简化了计算量,使得代码更容易实现。有许多函数的实现需要使用滤波器(核函数、掩膜运算)等等,很多种叫法,但实际上就是构造一个3x3或者5x5以及更大的矩阵,完成一个卷积运算。在c++中使用Mat构造一个核函数其实很简单,下面给出代码示例//需要包含的头文件#include<iostream>#include<opencv2/opencv.hpp>//定义命名空间using namespace std;using nam原创 2020-07-18 15:48:11 · 364 阅读 · 0 评论 -
使用unordered_map和queue找出字符流中第一个不重复出现的字符
题目描述找出字符流中第一个不重复出现的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。如果当前字符流没有存在出现一次的字符,返回#字符。话不多说,上代码类函数的实现如下://是删除排序好的链表中重复节点的题目变形class Solution{public: unordered_map<char, int> mapCheck; queue<char> q原创 2020-07-16 22:18:50 · 127 阅读 · 0 评论 -
双指针判断单向链表中是否存在环
题目描述查找一个单向链表中是否存在环,如果存在,返回环的入口节点,否则返回空。如下图,此图来源于牛客网,此处为了更清晰的理解单链表中的环特别引用的在此处,感谢牛客网的贡献step.1:定义一个快指针fast指向头结点, 慢指针slow指向头结点,一个步量节点inList指向头节点step.2:让fast一次走两步, slow一次走一步,第一次相遇在C处,停止step.3:然后让slow和inList每次同时走一步,当相遇时,就是入口结点。下面开始上代码:项目中一个cpp和一个h文件大约是下原创 2020-07-16 20:46:06 · 391 阅读 · 2 评论 -
直接删除法删除链表中重复的节点
题目描述:在一个排序好的链表中,删除所有重复的节点,将删除后的链表的头节点返回。如果没有说明是经过排序的链表,那这个题目的难度将会增加一个等级。既然链表是经过排序的,因此所有重复的节点必定连在一起,因此只需要定义两个指针,一前一后遍历一遍链表即可,但是这个题目有一个难点,就是如何有效的返回这个头节点,因此,必须定义一个头节点,指向题目给出的头节点。链表的结构体以及构造函数如下所示:struct ListNode { int val; struct ListNode *next;原创 2020-07-15 20:54:03 · 147 阅读 · 0 评论 -
二叉树根节点左右子树的遍历存储
题目描述判断一棵二叉树是否对称。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。我用的深度遍历方法,将二叉树根节点的左右子树分别存储在一个向量中,递归完成之后比较两个向量是否相同,决定这是不是对称二叉树,经过测试,实验结果是正确的,但是在提交验证的时候不能通过,运行超时,可见额外的存储和比较还是比较耗时的。下面我把超时的代码跟不超时的代码贴出来,给大家比较一下,希望下次能够注意。这是二叉树的结构体和构造函数struct TreeNode { int val; struct Tree原创 2020-07-13 20:55:15 · 363 阅读 · 0 评论 -
对二叉树实现之字形打印
题目描述:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,其他行以此类推。队列实现使用队列实现二叉树的之字形打印,跟层序打印二叉树其实是一样的思路,只不过需要设置一个标记位,因为奇数行实现的是从左到右的打印顺序,而偶数行是从右到左的打印顺序,所以要根据标志位实现每层的一个反转。二叉树的结构体代码struct TreeNode { int val; struct TreeNode *left; struct TreeNode原创 2020-07-12 20:32:12 · 279 阅读 · 0 评论 -
二叉树的逐层打印
题目描述将二叉树逐层遍历并打印每个节点的数据。首先,二叉树的结构体如下:struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};首先,这个题目存在一个点,就是如何确定这一层已经遍历完成。下面我利用自己画的一幅图说明这一点。字有点丑,现原创 2020-07-12 15:39:06 · 753 阅读 · 0 评论 -
使用队列层序遍历,序列化二叉树
c++实现序列化二叉树原创 2020-07-08 19:49:53 · 476 阅读 · 0 评论