- 博客(30)
- 收藏
- 关注
原创 AfxBeginThread()函数中,第一个参数为什么一定要声明成UINT ExecutingFunction (LPVOID pParam);的形式
可以看出,第一个参数是个函数指针,而它的类型是用typedef定义的。而上面这个typedef里就规定了它的类型就LPVOID。其实这个参数类型相当于一个万能指针类型,可以强制相互转化的。这个函数有两个版本,你说的是第一个版本,这个版本里第一个参数的类型是AFX_THREADPROC。你可以看下MSDN里AfxBeginThread函数的用法。
2024-09-25 10:19:18
164
原创 MFC的UpdateData()函数
由MSDN提供的帮助信息可以知道:在程序代码中从来不直接调用这个函数,而是通过Cwnd类另一个成员函数UpdateData来调用。也就是说,为了让数据交换生效,就必须去调用DoDataExchange函数,但程序代码不是直接调用这个函数,而是需要去调用UpdateData这个函数。对模态对话框来说,当它创建时,框架自动以参数值FALSE调用UpdateData函数来初始化对话框控件的内容。提示:因为UpdateData函数参数的默认值为TRUE,所以从对话框获取数据时可以省略其参数值。
2024-09-24 10:10:16
324
原创 MFC的CcomboBox无法显示下拉内容
效果是有的,但是需要改变高度,这样的话布局就乱了。我希望不做任何宽高修改或者只做一点宽高修改就可以成功。最后我将CcomboBox的宽改成了130,高改成了25,就可以实现正常下拉框显示了。一开始以为是小三角没有下拉的问题导致的,于是参考了。对下拉条目高度进行拉取。
2024-09-20 11:36:31
521
原创 ULONG_PTR的作用
ULONG_PTR就是能够装得下指针的无符号整数,在32位被定义成unsigned long,在64位被定义成unsigned __int64,w64是如果是64位则警告。所以,ULONG_PTR就是 unsigned long *,GDI+中好像就是这么定义的。指针不支持比较大小,将指针转换成ULONG_PTR类型,可以比较大小。从ULONG_PTR本身来看,应该是一个无符号long型指针。在进行指针的整数运算时可以用ULONG_PTR作类型转换。
2024-09-12 11:00:20
407
原创 fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “StdAfx.h“”?
有些SDK文件是不使用预编译头的,如果在编译的时候配置属性设置成使用预编译头就会出现这个问题。将其改成不使用预编译头即可。
2024-09-06 10:38:11
113
原创 将文件拷贝给他人时的清理文件
同理,x84环境下的Debug和Release模式都可以以这种方式清理之后再发给其他人,清理掉这些中间件文件,打包出来的大小也会小很多。当我们将项目拷贝给别人使用的时候,有些目录的内容是可以清理掉的,其中占用了大量的存储空间。比如Debug文件、X64文件夹下的Debug和Release文件。可以看到文件是很多的,这个时候我们点击IDE目录下的生成->清理。以Win32的Debug文件举例,下图是未清理的Debug文件。
2024-09-06 09:48:30
196
原创 VS QT——ui不显示新添加成员控件,代码无提示(解决过程记录)
在VS内头文件文件夹下添加找到的头文件目录并添加现有项。点击ui文件属性,用于查看ui.h文件的文件路径。记录一下UI不显示新添加成员控件的过程。这里可以看到是在当前uic路径下。打开ui文件,点击保存按钮。顺着文件路径找到.h文件。退出重新生成解决方案。
2024-09-04 09:37:01
309
原创 查找QT Designer下方工具栏(动作编辑器)
听课的时候看到老师的编辑框有一个动作编辑器在界面下方,我的版本没有,于是查看了一下,在界面的右下方,显示为动作编辑器。
2024-08-30 14:14:43
632
原创 SendMessage、PostMessage原理
仔细看完MSDN解释,我们了解到,SendMessage的确是发送消息,然后等待处理完成返回,但发送消息的方法为直接调用消息处理函数(即WndProc函数),按照函数调用规则,肯定会等消息处理函数返回之后,SendMessage才返回。而PostMessage却没有发送消息,PostMessage是将消息放入消息队列中,然后立刻返回,至于消息何时被处理,PostMessage完全不知道,此时只有消息循环知道被PostMessage的消息何时被处理了。具体细节,下面第2点将会讲到。我们先来看最简单的。
2024-08-26 15:28:53
514
原创 JUCE的UI详解(Slider篇)
JUCE的Slider是一个用于更改值的滑块控件。滑块可以是水平的、垂直的或旋转的,并且可以选择显示文本框来表示当前值。
2022-12-27 10:43:34
379
原创 剑指Offer:判断是不是平衡二叉树
描述输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。样例解释:样例二叉树如图,为一颗平衡二叉树注:我们约定空树是平衡二叉树。数据范围:n \le 100n≤100,树上节点的val值满足 0 \le n \le 10000≤n≤1000要求:空间复杂度O(1)
2022-03-16 14:17:20
166
原创 剑指Offer:树的子结构
描述输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构)假如给定A为{8,8,7,9,2,#,#,#,#,4,7},B为{8,9,2},2个树的结构如下,可以看出B是A的子结构数据范围:0 <= A的节点个数 <= 100000 <= B的节点个数 <= 10000我的思路是一开始乱写,不通过再讨论。public boolean HasSubtree(TreeNode root1,TreeNode root2) { i
2022-03-16 11:20:33
447
原创 剑指Offer:二叉树中和为某一值的路径(二)
描述输入一颗二叉树的根节点root和一个整数expectNumber,找出二叉树中结点值的和为expectNumber的所有路径。1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点2.叶子节点是指没有子节点的节点3.路径只能从父节点到子节点,不能从子节点到父节点4.总节点数目为n如二叉树root为{10,5,12,4,7},expectNumber为22则合法路径有[[10,5,7],[10,12]]数据范围:树中节点总数在范围 [0, 5000] 内-1000 <
2022-03-15 15:09:24
143
原创 剑指Offer:二叉树中和为某一值的路径(一)
描述给定一个二叉树root和一个值 sum ,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径。1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点2.叶子节点是指没有子节点的节点3.路径只能从父节点到子节点,不能从子节点到父节点4.总节点数目为n例如:给出如下的二叉树, sum=22返回true,因为存在一条路径 5-> 4-> 11->→2的节点值之和为 22我的思路感觉很简单,就先乱写一下,应该会出错,出错了再改int sum;
2022-03-15 14:03:43
229
原创 剑指Offer:重建二叉树
描述给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。提示:1.vin.length == pre.length2.pre 和 vin 均无重复元素3.vin出现的元素均出现在 pre里4.只需要返回根结点,系统会自动输出整颗树做答案对比数据范围:n \le 2000n≤2000,节点的值 -10000 \le val \le 10
2022-03-15 12:08:07
754
原创 剑指Offer:从上到下打印二叉树
描述不分行从上往下打印出二叉树的每个节点,同层节点从左至右打印。例如输入{8,6,10,#,#,2,1},如以下图中的示例二叉树,则依次打印8,6,10,2,1(空节点不打印,跳过),请你将打印的结果存放到一个数组里面,返回。数据范围:0<=节点总数<=1000-1000<=节点值<=1000我的思路一开始觉得挺简单,结果代码刚敲完就进入死循环。public ArrayList<Integer> PrintFromTopToBottom(TreeNode
2022-03-14 14:04:39
155
2
原创 剑指Offer:二叉搜索树的第k个节点
描述给定一棵结点数为n 二叉搜索树,请找出其中的第 k 小的TreeNode结点值。1.返回第k小的节点值即可2.不能查找的情况,如二叉树为空,则返回-1,或者k大于n等等,也返回-13.保证n个节点的值不一样数据范围: 0 \le n \le10000≤n≤1000,0 \le k \le10000≤k≤1000,树上每个结点的值满足0 \le val \le 10000≤val≤1000进阶:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)如输入{5,3,7,2,4,6,8},3
2022-03-14 13:14:29
313
4
原创 剑指Offer:二叉树的镜像
描述操作给定的二叉树,将其变换为源二叉树的镜像。数据范围:二叉树的节点数 0 \le n \le 10000≤n≤1000 , 二叉树每个节点的值 0\le val \le 10000≤val≤1000要求: 空间复杂度 O(n)O(n) 。本题也有原地操作,即空间复杂度 O(1)O(1) 的解法,时间复杂度 O(n)O(n)比如:源二叉树...
2022-03-14 10:09:54
186
2
原创 剑指Offer:按之字形顺序打印二叉树
搞了这么久终于到了一道中等题。描述给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)数据范围:0 \le n \le 15000≤n≤1500,树上每个节点的val满足 |val| <= 1500∣val∣<=1500要求:空间复杂度:O(n)O(n),时间复杂度:O(n)O(n)例如:给定的二叉树是{1,2,3,#,#,4,5}该二叉树之字形层序遍历的结果是[[1],[3,2],[4,5]]我的思路其实没啥思路,就是有点
2022-03-13 13:49:46
1028
原创 剑指Offer: 二叉树的深度
描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度,根节点的深度视为 1 。数据范围:节点的数量满足 0 \le n \le 1000≤n≤100 ,节点上的值满足 0 \le val \le 1000≤val≤100进阶:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n)假如输入的用例为{1,2,3,4,5,#,6,#,#,7},那么如下图:我的思路一般求解二叉树的问题,很多都是用到了递归,这道题也是需要用到递归
2022-03-13 11:07:41
146
原创 剑指Offer:删除链表的节点
描述给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。1.此题对比原题有改动2.题目保证链表中节点的值互不相同3.该题只会输出返回的链表和结果做对比,所以若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点数据范围:0<=链表节点值<=100000<=链表长度<=10000我的思路我想着直接遍历链表然后遇到要删除的值就cur = cur.next就好。但是还是错了public ListNode
2022-03-13 10:13:28
1232
3
原创 剑指Offer:链表中倒数最后k个结点
描述输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为 0 的链表。要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)进阶:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)例如输入{1,2,3,4,5},2时,对应的链表结构如下图所示:其中蓝色部分为该链表的最后2个结点,所以返回倒数第2个结点(也即结点值为4的结点)即可,系统会打印后面所有的节点来比较。我的思路这个题也很简单,也是一个双指针的
2022-03-12 14:54:15
318
原创 剑指Offer:链表中环的入口结点
描述给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。数据范围: n\le10000n≤10000,1<=结点值<=100001<=结点值<=10000要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)例如,输入{1,2},{3,4,5}时,对应的环形链表如下图所示:可以看到环的入口结点的结点值为3,所以返回结点值为3的结点。输入描述:输入分为2段,第一段是入环前的链表部分,第二段是链表环的部分,后台会根据第二段是否为空将这
2022-03-12 13:48:02
684
原创 剑指Offer:两个链表的第一个公共结点
描述输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)数据范围: n \le 1000n≤1000要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)例如,输入{1,2,3},{4,5},{6,7}时,两个无环的单向链表的结构如下图所示:可以看到它们的第一个公共结点的结点值为6,所以返回结点值为6的结点。输入描述:输入分为是3段,第一段是第一个链表的非公共部分,第二
2022-03-12 11:22:23
77
原创 剑指Offer:合并两个排序的链表
描述输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。数据范围: 0 \le n \le 10000≤n≤1000,-1000 \le 节点值 \le 1000−1000≤节点值≤1000要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)如输入{1,3,5},{2,4,6}时,合并后的链表为{1,2,3,4,5,6},所以对应的输出为{1,2,3,4,5,6},转换过程如下图所示:或输入{-1,2,4},{1,3,4}时,合并后的链表为{-1
2022-03-12 10:41:41
750
原创 剑指Offer:反转链表
描述给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。数据范围: 0\leq n\leq10000≤n≤1000要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n) 。如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。以上转换过程如下图所示:我的思路这道题我调试了好几次都是错的,其实还是因为链表指向的问题,对链表的赋值和传递都不是很熟悉,连错了很多次。这里
2022-03-11 15:21:56
165
1
原创 剑指Offer:从尾到头打印链表
描述输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。如输入{1,2,3}的链表如下图:返回一个数组为[3,2,1]0 <= 链表长度 <= 10000我的思路其实这道题很简单,就是要注意一点,有另一道题目叫做反转链表,这道题和它的区别在于一个是只需要返回节点的值,把值赋在数组上并且返回的,但是如果是反转链表的话,就需要修改指针的指向,这两个虽然形式很像但是其实内容还是有很大的差别的。所以这道题可以很轻松的拿下!直接利用递归遍历到链表的最后一位,再一层一层
2022-03-11 13:47:29
98
原创 剑指Offer 09.用两个栈实现队列
描述用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。数据范围: n\le1000n≤1000要求:存储n个元素的空间复杂度为 O(n)O(n) ,插入与删除的时间复杂度都是 O(1)O(1)我的思路这道题也是一道简单题,思路也很容易想到,并且只用完成push和pop的操作。但是在实现的时候要注意细节,我感觉算法题都是题目写多了思路不会少,经常有思路但
2022-03-11 13:19:14
182
原创 剑指Offer 30.包含min函数的栈
描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop、top 和 min 函数操作时,栈中一定有元素。此栈包含的方法有:push(value):将value压入栈中pop():弹出栈顶元素top():获取栈顶元素min():获取栈中最小元素数据范围:操作数量满足 0 \le n \le 300 \0≤n≤300 ,输入的元素满足 |val| \le 10000 \∣val∣≤10000进阶:栈的各个操作的时间复杂度是 O(1)\O(1)
2022-03-11 11:54:15
293
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人