- 博客(91)
- 资源 (2)
- 收藏
- 关注
原创 不用加减乘除实现加法
不用加减乘除实现加法其实看到这玩意,第一反应就是计算机原理东西,就是二进制运算然后就从二进制角度讨论这玩意吧~学过小学加法都晓得,加法是从个位加法开始,然后进阶十位加法,解这玩意的思路也可以这样:以2+3为例,转为二进制为10+11不考虑进位的结果先枚举下所有情况,再总结规律:0+1=10+0=01+0=11+1=0(由于不考虑进位,所以就只看最低位的值)从上面结果看,发现一个规律相同的值结果为0,不同的值结果为1,这就是异或运算符呀~所以不考虑进位结果用异或计算。只考虑进位结果
2021-01-22 17:20:32
306
1
转载 c++的stl erase函数使用
erase功能erase()函数的功能是用来删除容器中的元素删除某个容器里的某个元素:c.erase(T);看似一个简单的动作,然而对不同类型的容器,内部却做了截然不同的事情,后面介绍。例子假设有这样一个题目,将某个容器中所有满足条件N == X的元素删除,按照常规的思路应该有类似这样的代码:// 假设Container和container分别表示一种容器和对应的一个对象Container::iterator it;for (it = container.begin(); it != con
2021-01-20 15:08:49
757
原创 多重继承下父子类之间的类型转换
文章目录一、前言二、情景模拟复现三、开始分析1. 情况12. 情况23. 情况34. 情况4四、运行结果五、总结一、前言在日常工作中踩了一个坑,现象是:从一个dll里获取导出类A,然后调用类A的FunA,结果FunA没有被调用,相关代码简化如下:class AImpl : public OtherClass, public A{ // OhterClass 不包含类A的FunA ... // 用户通过该函数获取A的指针,结果用A的指针调用FunA失败 void Query(
2021-01-04 20:22:11
1324
原创 平衡树
文章目录零、题目一、理解题目二、解析思路三、解题过程方法1. 计算左右子树的深度方法2. 利用后序遍历计算左右子树的深度零、题目输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。一、理解题目遇到题目时不要慌张,冷静审题,找到目的,理解正确再做题,不要靠臆想做题预期:判断一个二叉树是否为平衡二叉树how:怎样判断呢?其实题目已经给我们提示了,任意节点的左右子树的深度相差不超过1关键字:树的深度二、解析思路这个题
2021-01-04 17:08:59
164
原创 利用VAssistX插件快速给类的全部声明函数生成定义
不知道各位大佬在日常开发时有没有遇到过这样一个问题:类的函数声明过多,即使每个声明可以通过VAssistX插件快速生成定义,如图:右键选中某个方法,在右键弹出菜单栏中选择该项即可生成该函数的定义但是当一个类有20多个声明(有可能更多)后,一个个这么弄,也挺费时的,偶然一个机会发现,竟然可以通过右键选中类名,在右键弹出框里点击该项,就可以生成该类的所有声明,太牛逼了!!!!...
2020-10-19 14:51:10
524
1
原创 《c++高级编程》第一章
今天看了《c++高级编程》第一章,本章主要内容就是介绍c++一些基本语法,最后以一个“员工记录系统”引用收尾,本篇文章就是想说说“员工记录系统”。学会分解需求当我看到这个名字,“员工记录系统”,获知其几个需求:新增员工、解雇员工、提高工资、展示全部在职员工和非在职员工,立马就想着如何实现了。这个思考方式太过激进了,需要改进。当我们看到任何一个需求,尽管再简单,也要对其进行分解:1)员工新增和减少 2)工资提高 3)全部员工信息需要展示,所以需要保存由此可见,员工是个对象,存储系统也是个对
2020-09-08 20:57:20
300
原创 关于stl中关联容器的一些基础东西
题外话最近发现自己日常工作中虽然用c++编码,但是没咋用stl的东西,所以就开始补充这方面的知识正题1. 声明set容器装的数据类型时可以顺便定义比较函数方法。如:普通的声明set容器装类型的方式:set<int> ss声明set容器时还定义比较方法(PS:写比较函数时注意相等比较要返回false):// 要写成结构体对象方式,而不是函数方式,因为set模板的参数是类型,而不是地址或函数struct compare{ bool operator()(cons
2020-08-28 15:58:54
114
原创 针对vector或string的shrink-to-fit的swap技巧
前言有时可能会遇到这样一种情况:声明一个vector变量为vec,前期会有很多元素存储到vec中,导致vec的capacity变大;后期因为一些原因要对vec的元素进行筛选,删除了vec里一些元素,但是没有改变vec的capacity,这会使vec占用很大内存,即size小于capacity。解决思路vector<container> vec;vec.push_back(a);...// 做了元素增加和筛选后,这时vec的size远远小于capacity...vector
2020-08-26 17:14:56
285
原创 #代码优化之匹配相关
1、原代码:if( strkey.comparenocase()|| strkey.comparenocase()|| strkey.comparenocase()|| strkey.comparenocase()|| strkey.comparenocase()|| strkey.comparenocase()|| strkey.comparenocase()|| strkey.comparenocase()|| strkey.comparenocase()|| strkey.comp
2020-08-24 14:31:28
191
原创 记一次字符乱码bug解决过程
前言最近被分配了一个bug:解决上报数据中文乱码问题。d⊂(ο・㉨・ο)⊃又是字符乱码问题。大概背景是:该数据是在produce.dll中通过assemble.dll组装,调用upload.dll上传的如何在多个模块中定位是哪个环节出的问题,这是比较恶心和比较棘手的问题~解决过程一、首先解决如何在多个模块中定位哪个环节出的问题1)通过日志定位问题。本来是想通过看日志定位问题的,但是日志显示的没有乱码,然而抓的包以utf-8显示时,发现就乱码了,所以通过日志定位不可行。2)通过调试
2020-08-04 21:01:37
595
原创 windows 修改桌面快捷方式的名字
直接贴代码~#include <shellapi.h>#include <shlobj.h>#pragma comment(lib, "shell32.lib")bool _ChangeLinkFile(CString strOrignPath, CString strAferPath){ HRESULT hr = CoInitialize(NULL); if (SUCCEEDED(hr)) { IShellLink *pShellLink = NULL;.
2020-07-02 17:54:00
1147
原创 踩过的坑—CString的format方法报错Incorrect format specifier
前言在CString上踩过很多坑,避免以后踩过相同的坑,就把该坑记录~背景:在转换环境变量函数里输出日志多次调用了format方法,导致程序崩溃。例子类似这样调用:CString strPath;// ....//strPath 从配置文件中读入,格式如:%installPath%/test.datOutputLog(L"path is %s", strPath);然后程序出现这样的错误:解决过程这个现象是多个线程到同个函数里输出该条日志触发的,当时以为是多线程导致
2020-06-30 17:24:15
3683
1
原创 #mark资源# chrome增加扩展程序
前言最近遇到一个问题,chrome不能通过拖拉方式增加扩展程序,即使是官方网站下载的crx也不行解决通过搜索发现可能是因为下载的扩展程序兼容性不够好,所以导致该版本的chrome不能增加扩展程序,即只要下载一个兼容性好的扩展程序,就可以在chrome里面通过拖拉方式增加扩展程序。从哪下载https://pictureknow.com/extensions从上面网址上下载的扩展程序可以以拖拉方式加载到chrome中...
2020-05-22 10:33:17
209
原创 实现最小栈
题目实现一个这样的栈,这个栈除了可以进行普通的push、pop操作以外,还可以进行getMin的操作,getMin方法被调用后,会返回当前栈的最小值。栈里面存放的都是 int 整数,并且数值的范围是 [-100000, 100000]。要求所有操作的时间复杂度是 O(1),空间复杂度也能O(1)的话可加分。代码class MinStack{public: MinStack(){...
2020-05-07 17:16:10
190
原创 记录前几天踩过的一个关于重定向的巨坑
前言前几天发现一个神奇的bug,程序加载dll时提示失败,但是在win7 x64的1760环境可以成功,但是在win7 x64的1761环境加载失败。解决思路PS:我就不把我走的n多弯路写出来了。。。。。太坑了1、通过windbg远程调试或者vs远程调试定位到加载dll失败,定义该dll名字为error.dll,但是写了个test测试是否可以成功加载该dll,成功了。此时觉得有...
2020-04-23 17:22:49
334
转载 C/C++代码跨平台编译注意问题
平台包括: windows7(32bit and 64bit), windows 8.1(32bit and 64bit, desktop, app store, metro ),windows phone, Mac(32bit and 64bit), iOS(32bit and 64bit, x86, x64, armv6,armv7-a, arm64), Linux(32bit an...
2020-04-15 15:52:14
1908
原创 c++ 跨平台开发
前言要达到c++跨平台开发目的,我打算从为什么C++不能跨平台开发和如何实现跨平台开发这两个方面入手为什么C++不能跨平台开发C++不能跨平台,不是指源程序不能跨平台,而是可执行文件不能跨平台。因为C++源程序要经过预处理、编译、汇编和链接过程才生成可执行文件,但由于这过程中会受到平台限制,如汇编语言有不同版本,和平台有关(CPU、操作系统和编译器等);所以不能将windows平台...
2020-04-15 15:41:51
7729
原创 三个调用约定的区别
调用约定 参数传递方向 谁清理栈 使用场合 修饰函数符号表格式 __cdecl 从右向左 调用方 C/C++、MFC的默认方式; 可变参数的时候使用 _函数名 __stdcall 从右向左 被调用方退出函数时清理 Win API _函数名@参数名 __fastcall 从右向左, 但左边开始的两...
2020-04-13 17:21:38
174
原创 volatile和explicit含义
直译首先看其中文意思,辅助理解记忆。volatile:adj. [化学] 挥发性的;不稳定的;爆炸性的;反复无常的n. 挥发物;有翅的动物explicit:adj. 明确的;清楚的;直率的;详述的在c++的含义1)volatile:用于告诉编译器不要优化,在运行期再取其值。程序在进行编译的时候, 编译器会进行一系列的优化.比如, 某个变量被修饰为 c...
2020-04-05 16:56:45
217
原创 运算符优先级
前言踩了几次关于运算符优先级的坑,所以就写这个文章mark一下~正文 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] ...
2020-03-27 18:13:40
170
原创 关于delete野指针没有崩溃的神奇bug
前言最近遇到一个神奇的bug:delete野指针没有崩溃。解决过程查了很多资料,大致意思是c++没有定义delete野指针的行为,所以delete野指针的行为不可定义,即有可能崩溃也有可能不崩溃。印象比较深刻的一个比喻是:指针指向的内存相当于房间,指针相当于钥匙,当你delete指针就相当于退房,但是由于没有置指针为空(此时该指针就变成野指针),就相当于你还有这个房间的钥匙。但是房东只...
2020-03-25 15:55:52
644
原创 关于createMutex的神奇bug
前言最近遇到一个神奇的bug:调用CreateMutex返回句柄值为空,但GetLastError值为0解决思路首先,该问题并没有定位到原因,最后是换了个mutex名字就解决了。1、使用Process Explorer查找当前创建Mutex名字结果是查找记录为空,说明本机中不存在该Mutex句柄2、使用windbg调试该exe2.1 下断点通过代码知道该互斥体是...
2020-03-25 15:32:15
547
原创 在矩阵中查找路径:DFS算法
本问题是典型的矩阵搜索问题,可使用深度优先搜索(DFS)+ 剪枝解决题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[[...
2020-03-24 17:04:02
1289
原创 在排序数组中查找某个值——要想到二分法
排序数组的查找问题首先考虑使用二分法解决,其可将遍历法的线性级别时间复杂度降低至对数级别。题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组[3,4,5,1,2]为[1,2,3,4,5]的一个旋转,该数组的最小值为1。思路:!!!排序数组查找问题别一上来就是循环遍历,...
2020-03-20 16:44:42
377
原创 青蛙跳台阶问题解决思路
求多少种可能性的题目一般都有递推性质,即f(n)f(n)和f(n-1)f(n−1)…f(1)f(1)之间是有联系的。例如题目青蛙跳台阶:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:把它弄成数学函数。。。1、正向思维:从第一次跳几级思考。它第一次可以跳1或2级,这样弄出来的数学函数是f(n) = f(n-1)+f...
2020-03-20 15:32:31
611
转载 为什么C++用C函数时要加extern c
C++相对于C语言而言支持函数重载是其极大的一个特点,相信在使用C语言的时候大家如果要写一个实现两个整型数据相加的函数还要写一个浮点型数据相加的函数,那么这两个函数的名字绝对不可以一样,这样无疑在我们使用这个函数的时候增加了复杂性,但是在C++中我们却可以很好的解决这个问题,因为在C++中函数是支持重载的也就是说两个函数的函数名可以一样,这样并不会出现函数名重定义的问题,但是我们在...
2020-03-16 18:45:46
779
原创 Mark一下:pip install失败解决方法
问题:pip install itchat提示Could not find a version that satisfies the requirement skimage (from versions: )解决方法:这可能是网络问题导致的,可以借用国内的镜像源,如豆瓣源加速。pip install xx库-i http://pypi.douban.com/simple/ --t...
2020-03-03 17:54:53
495
转载 VS 运行库MT和MD的区别
前言日常工作中总会遇到将项目统一配置为MD,知其然不知所以然。。。。。。所以就有了这篇文章来知其所以然。。。。。VC项目属性→配置属性→C/C++→代码生成→运行时库 可以采用的方式有:多线程(/MT)、多线程调试(/MTd)、多线程DLL(/MD)、多线程调试DLL(/MDd)、单线程(/ML)、单线程调试(/MLd)。目前Win7、Win10等,选择MD问题不大,但是XP等一些比较...
2020-03-02 16:53:59
1387
1
原创 c++ 释放资源
1、适合场景有时候会想在A.exe释放b.exe以供A.exe使用,这时候就会用到释放资源这玩意~2、涉及函数以及调用次序2.1查找资源:FindResource2.2 加载资源:LoadResource2.3 锁住资源:LockResource2.4 获取资源大小:SizeofResource2.5 创建文件:CreateFile2.6 将资源写到文件中:W...
2020-02-27 17:30:14
1714
3
原创 sizeof占的内存大小
题目:若char是一字节,int是4字节,指针类型是4字节,代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 class CTest { public: CTest():m_chData(‘\0’)...
2020-02-15 13:35:41
355
原创 在程序中生成dump
概要主要涉及的函数有:1、SetUnhandledExceptionFilter(参数)——》程序出现崩溃就会调用该函数2、重写【参数】的回调函数:格式为LONG WINAPI UnhandledExceptionFilterToCreateDump(PEXCEPTION_POINTERS pExInfo)——》程序崩溃时系统就会调用这个回调函数3、MiniDumpWriteDum...
2020-01-20 16:34:31
245
1
原创 Windows注册表--32位和64位程序写注册表位置
前言最近遇到个关于注册表的神奇的事情,当使用RegCreateKeyEx+KEY_WOW64_64KEY在win7环境下写HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\123.exe时,发现结果没有达到预期:在wow6432node下没有该项。解决思路1、测试自己使用RegCreateKey...
2020-01-14 16:53:33
2572
原创 void**的使用
eg:GetContext(const wchar_t* pKeyName, void** pValue, int& nLen);其中pValue是在GetContext中获取的值,并在该函数内部分配内存,调用GetContext的在调用地方调用ReleaseData释放该内存。该函数内部做如下使用:step1)WCHAR *pContent = new WCHAR[MA...
2019-12-31 17:36:14
1509
原创 curl库的用法
介绍libcurl作为是一个多协议的便于客户端使用的URL传输库,基于C语言,提供C语言的API接口,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP这些协议,同时支持使用...
2019-11-22 16:02:45
4132
原创 【后记】
Effective C++这本书今天就算看过一遍啦~每个条款的总结都在前面文章罗列了,因为每个条款里面很多知识点对于我来说都是比较新鲜的,所以就以一种记笔记形式记录下来,可能个人总结占比比较少,但是一步步来吧~目前计划先把这些条款重点都怼过一遍,脑子对其有点印象,然后后期再看看自己写的笔记或遇到相关问题后,到时有了自己更深的体验感悟再补充吧~...
2019-09-26 21:17:27
115
原创 EC43
43. 学习处理模板化基类内的名称如果编译期间有足够信息确定类型,可以采用基于template解法。eg:如果要传送消息给多个不同的公司,如果编译期间有足够的信息决定哪个信息传至哪个公司,就可以采用基于template解法。模板全特化:看个例子:template<> //该语法象征这既不是template,也不是标准class,而是特化版的MsgSender temp...
2019-09-26 21:09:44
172
原创 用windbg调试进入关键区死锁情况
step1:!cs -l得知进入死锁的关键区step2:~~[0x0000000000003558]查看拥有陷入死锁关键区的线程step3:~*kn 查看调用EnterCriticalSection的线程由上图可知,线程1和2都有调用EnterCriticalSectionstep4:~1kv详细查看线程1的参数和返回值由上图可知:线程1在等待012b9...
2019-09-26 20:35:38
167
原创 EC40
40. 明智而审慎地使用多重继承多重继承可能带来的风险:继承类从一个以上的基类继承相同名称(如函数和typedef等),可能会导致较多的歧义。当一个函数用virtual修饰了,那就说明要在继承类对其重新定义,不然就没必要用virtual修饰啦C++解析重载函数调用的规则时:在一个继承多个基类的继承类中,如果继承类调用的A函数同时存在多个基类中,C++首先会确认继承类调用的A函数的...
2019-09-20 10:25:05
302
原创 EC35
35. 考虑virtual函数以外的其他选择令客户通过public non-virtual成员函数间接调用private virtual函数。继承类可以重新定义继承而来的private virtual函数该条款主要介绍替代virtual函数的方法,主要有:1)用private virtual函数替代:即原本用virtual函数地方改成用非virtual函数,并在这里面调用private ...
2019-09-19 15:30:30
224
读取json文件需要的头文件和lib
2018-10-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人