自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 资源 (5)
  • 收藏
  • 关注

原创 C++zlib库实现的GZIP压缩解压缩工具类【多图警告^_^】

前几天和服务端同事联调TCP传输压缩后的Json串,遇到了 GZIP压缩问题。需要把原来使用的的压缩算法和后端统一,现在来总结一下。【注意】 这里就以Windows的Debug环境为例,Release版也是一样,只需更改配置编译就好。代码演示中不未涉及文件序列化问题。文件(文件夹)压缩问题,可以参考zip压缩文章Zip压缩解压缩1.下载zlib源码及工程文件:https://www.zlib.net/2.拿到源码包解压看看3.打开目录zlib-1.2.11\contrib\vstudio\

2021-12-23 21:46:51 758

原创 VS2013崩了,打不开资源文件了

之前和大佬合并完代码,忽然发现VS资源管理器的.rc文件打不开了。就这样:VS崩掉了。。。但是,想想也是啊。VS也是软件,是软件就可能存在bug,有bug我们就解决它。【尝试解决】1.rc文件打不开,就到项目路径下去找到对应的Resource Script文件:2.打开SVN,仔细比对文件差异。3.对比出来异常。箭头指向,Mine的3078行两个END并行了。这会不会是问题所在呢?不知道,拆开保存后试试。4.现在打开试试,成功。小结:1.项目Merge需要仔细处理每个冲突,

2021-11-15 22:23:33 75

原创 C++使用Sqlite

最近项目中有使用到sqlite处理数据,发现以前最基本的SQL有点把握不住了,就赶紧复习回顾一下。.1.先下载SQLlite官网下载包https://www.sqlite.org/download.htmlSQLite Download Page - Source Code - 我选择的版本号是:version 3.35.5下载解压完成后,拿到四个文件:2.添加进我们VS工程。开发环境:VS2013。添加四个文件到我们的工程:–编译错误;错误原因:不该使用预编译头。解决方法:选中

2021-05-22 18:09:18 1409 11

原创 C++试题:合并数组

题目描述给出两个有序的整数数组A和B,请将数组B合并到数组A中,变成一个有序的数组注意:可以假设A数组有足够的空间存放 B数组的元素,A和B中初始的元素数目分别为m和n#include <iostream>#include <map>using namespace std;class Solution {public: void merge(int A[], int m, int B[], int n) { multimap<int, int&g

2021-01-06 21:35:46 191

原创 C++有序数组的二分查找

题目描述请实现有重复数字的有序数组的二分查找。输出在数组中第一个大于等于查找值的位置,如果数组中不存在这样的数,则输出数组长度加一。示例1输入5,4,[1,2,4,4,5]返回值3说明输出位置从1开始计算class Solution{public: /** * 二分查找 * @param n int整型 数组长度 * @param v int整型 查找值 * @param a int整型vector 有序数组 * @return int整型 */ int uppe

2021-01-06 21:31:16 288

原创 C++环形链表

今天在牛客上做题,遇到两次环形链表,晚上回来小结一下。题目描述对于一个给定的链表,返回环的入口节点,如果没有环,返回null快慢指针法想象一下,有两个速度不同的跑步者。如果他们在直路上行驶,快跑者将首先到达目的地。但是,如果它们在圆形跑道上跑步,那么快跑者如果继续跑步就会追上慢跑者。这正是我们在链表中使用两个速度不同的指针时会遇到的情况:A.如果没有环,快指针将停在链表的末尾。B.如果有环,快指针最终将与慢指针相遇。Q:这两个指针的适当速度应该是多少?一个安全的选择是每次移动慢指针一

2021-01-06 21:21:26 479 1

原创 二维数组中的查找

题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例1输入7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]返回值trueclass Solution {public: bool Find(int target, vector<vector<int> > array

2021-01-04 19:43:28 19

原创 C++二分查找

今天在牛客上做题,遇到二分查找的问题,特地来复习复习。二分查找的算法思想很简单,就不多赘述,直接上代码。二分查找,找到返回目标下标,未找到返回-1#include <iostream>#include <vector>#include <time.h>#include <algorithm>using namespace std;void InitData(vector<int>& arr);void ShowDat

2021-01-04 19:39:16 72

原创 C++面试题

最近在牛客上刷题,分享一些比较有意思的AC过了的题目哈1.DNA序列【字符串】题目描述一个DNA序列由A/C/G/T四个字母的排列组合组成。G和C的比例(定义为GC-Ratio)是序列中G和C两个字母的总的出现次数除以总的字母数目(也就是序列长度)。在基因工程中,这个比例非常重要。因为高的GC-Ratio可能是基因的起始点。给定一个很长的DNA序列,以及要求的最小子序列长度,研究人员经常会需要在其中找出GC-Ratio最高的子序列。本题含有多组样例输入。输入描述:输入一个strin

2020-12-09 21:33:14 51

原创 好奇心的一天,如何查看VS工程代码行数?

今天早上,解决完问题候,突然就想自己写的工程有多少行代码呢?果然,有好玩的统计方法:a.查找- 组合键(ctrl + shift + F)- 输入:b*[^:b#/]+.*$b.范围:解决方案 - 勾选:正则表达式c.go又学到了好玩的一招,好玩儿 ^ - ^...

2020-11-30 21:45:38 157

原创 学习使用vs2019编写一个Linux c++程序

前言:前些日子,在centos捣鼓C++程序,6.5版本的GCC4.4实在太旧了,不支持C++11,官方说得升级到GCC4.7以上。于是乎,尝试更新GCC,一顿操作猛如虎,一看战绩0/5。。。不成功,便成仁,一气之下,整了个Centos8.2。这下子,舒服了,舒服了,看着代码可算是有点现代C++的感觉咯。后来,公司老哥推荐了VS2019编译LinuxC++,好奇心上来了,操作一番,终于成功。先来康康成果 ^ - ^:来看详细步骤:1、操作环境Win10+VS2019、VMware12+Centos

2020-11-08 19:36:48 448

原创 VS2013输出内存泄漏并定位代码行位置

最近在研究智能指针,想到以前没有智能指针的时候,如何定位内存泄漏位置呢?今天学习一个写测试demo的时候,分析泄漏的方法。#include <iostream>using namespace std;#ifdef _DEBUG#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)#define new DEBUG_CLIENTBLOCK#endif void GetMemoryLeak(){ _Cr

2020-07-06 21:52:01 255

原创 C++处理点在椭圆上的问题

最近,在工作中遇到需要处理鼠标选中椭圆的问题,思来想去,最后老老实实使用标准方程来解决的。今天,一起假装高中生 _。不多废话,直接上图:场景描述:在平面直角坐标系中,已知A、B两点坐标,并且画以AB为对角线的矩形的内接椭圆哦O,判断光标是否在椭圆上(选中该椭圆对象,椭圆高亮)。首先,复习下焦点不在坐标轴的椭圆的方程:点O(c,d)即为该椭圆中心点。这里,我在实际项目中,为了鼠标选中椭圆明显,设置10%的上下浮动。来看看具体实现:bool PtInEllipse(CPoint pt1, C

2020-06-16 22:46:33 655

原创 菜鸟学习使用三种C++智能指针

智能指针是一个类对象。在对象生命周期结束,将会被delete(栈区对象)。不仅对象会被删除,它指向的内存也会被自动delete,以免造成内存泄漏。首先来看一个错误实例:int main(){#ifdef _DEBUG _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); vector<Student*> arr; for (int i = 0; i < 10; i++) { Student *p =

2020-05-28 23:07:55 345

原创 小白搞定cJSON解析库

一、拿到解析库文件。这里,我就到交友圣地github下载好这个C语言开源项目。其作者在Usage开头介绍到cJSON意图成为最 dumb的json解析器,以至于它简单到只有一个源文件和一个头文件,我们可以直接包含到自己工程里面使用。二、创建demo程序。测试环境:Win10 + VS2019a).两个文件包含到我们测试程序中,并且创建一个工具类CMyJsonParser:b).解析类...

2020-04-19 17:32:38 208

原创 vim常用模式手记

一、vim命令模式。1.移动光标。1.1. 光标移动到行首,按键:shift + 6(大键盘) 即^1.2. 光标移动到行尾,按键:shift + 4(大键盘) 即$1.3. 光标移动到首行,按键:gg1.4. 光标移动到尾行,按键:G1.5. 向上翻屏,按键:Ctrl + b(backward) 或者 PageUp1.6. 向下翻屏,按键:Ctrl + f(forward) 或者 ...

2020-03-24 22:15:51 100 2

原创 Linux中top指令笔记

top指令用来查看 CPU使用情况,能够实时显示系统中各个进程的资源占用情况,用来监控、分析linux的系统性能状况。、作用:查看服务器的进程占的资源。语法:# top (动态显示)交互操作快捷键:1 :当服务器拥有多个cpu 的时候可以使用“1”快捷键来切换是否展示显示各个cpu 的详细信息;P(大写):,表示将结果按照CPU 使用率从高到低进行降序排列;M(大写):表示将结果按照内...

2020-03-18 23:34:51 133

原创 C++判断一个大于2的整数是否是素数

最近在学习乔林老师的C++教学视频。在算法一节有关于判断素数的内容,感觉挺有收获的,就想着跟大家分享一下。现在,让我们一起来学习吧。1.面对素数合数检验,我们很容易就联想到暴力穷举的算法。例如以下例程:/*解法一*/bool IsPrime_1(unsigned int n){ unsigned int i = 2; while (i<n) { if (n%i == 0)...

2020-03-08 17:00:24 3838 2

原创 C/C++辨析篇之指针和const

1. const int a; 和 int const a;解答:前者const修饰int,后者const修饰a,二者作用一样。变量a均被定义成一个常整型数,一旦被定义,就不能更改a值。*2. const int * a;和 int const a;二者作用一样,都是指向常量的指针。 解答:const修饰 int,而不是指针,则a是一个指向常整型数的指针。a解引用后 (*a)不可以被重新赋...

2020-02-11 16:59:27 57 1

原创 一起来学习C++队列的模板实现

1、概念。队列(Queue),队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。二、基本操作。1.Append();2.GetHead();3.GetTail();4.Pop();5.GetSize();6.IsEmpty...

2020-01-09 22:22:18 176

原创 C++操作符typeid学习

1、概述。在c++中,typeid用于返回指针或引用所指对象的实际类型。 – 百度百科2、实例头文件:#include <typeinfo>调用:int main(){ int a = 1; bool b = true; char c = 'c'; short d = 2; float e = 1.1f; double f = 2.2; long long ...

2020-01-09 21:07:12 79

原创 一道有趣的C++面试题

今天在溜达的时候,看到了一道题目,来学习一下。思考下面这道题目的输出:#include <iostream>#include <stdio.h>using namespace std;int main(){ for (char i = 0; i < 256; i++) { printf("%d ", i); } cin.get(); retu...

2019-12-22 22:53:49 95

原创 C++空类知识点学习

1、概述。空类,是指编译器不会生成任何成员函数的class。对于空类,编译器不会生成任何的成员函数,只会生成1个字节的占位符。2、为何EmptyClass占一字节呢?如果定义对EmptyClass取sizeof()的值为0,那么该空class实例化出100个对象时,在内存地址上就不能区分该class实例化出的对象,这是难以想象及接受的!因此,为了实现每个实例在内存中都有一个独一无二的地址,编...

2019-12-22 22:36:43 159

转载 Big Endian 和 Little Endian 详解

一、Endian的起源在各种计算机体系结构中,对于字节、字等的存储机制有所不同,因而引发了计算机通信领域中一个很重要的问题,即通信双...

2019-12-19 18:08:54 200

原创 复习C++多态知识点(编译多态、运行多态)

1、什么是多态?顾名思义,多种形态,指同一对象不同环境下的不同表现形态。2、多态分两大类。多态,分静态多态和动态多态两类。3、静态多态。静态多态,又称作编译期多态,是在程序编译期完成的。现在,我们来看两个例子。静多态的两种情况:A、函数重载,编译期根据传参类型来辨别选择调用恰当的函数。示例如下:#include<iostream>using namespace s...

2019-12-18 23:12:57 237

原创 C/C++ #define知识点

1、# 是把参数字符串化,## 是将两个参数连为一个整体。“#”表示这是一条预处理命令(凡是以“#”开头的均为预处理命令。)2、#define 的作用。#define是C/C++语言源程序中宏定义。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,叫做“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成。宏代换是由预处理程序自动完成。宏定义标识符,一般使用大写字...

2019-12-17 22:52:37 2214

原创 C++堆栈知识点

一、栈和堆的区别。1、申请方式的不同。栈由系统自动分配,堆由程序员使用new(关键字)或malloc(库函数)申请开辟;2、申请大小的不同。栈获得的空间较小,windows系统里面栈的大小是2M,在linux系统里面栈的大小是8M,而堆获得的空间较大;3、申请效率的不同。栈分配速度较快,但堆速度比较慢。因为系统用链表实现空闲地址空间的,所以堆的内存空间不连续的(链表的遍历效率低下)。4、底...

2019-12-17 22:18:15 138

原创 同步和异步之分

同步(Sync),并非同时之意,而是协同配合的意思,意在先后。调用者 发出调用指令,在没得到结果前,该调用永不返回。工作必须一件一件事做,且等前一件做完了才能做下一件事。场景①:起床先刷牙、后吃饭,不可能同时做;场景②:士兵A:“洞幺洞幺,我是洞拐,敌军来犯,请求支援。over”。士兵B听到“over”后,才去回复。场景③:windows编程中,SendMessage()用来给某个线程(或者...

2019-12-17 22:01:17 90

原创 一起来学习C++数组栈和链表栈的模板实现

一、概念。1、栈(Stack)是线性存储的数据结构。2、栈的数据元素遵守"先进后出"(First In Last Out)原则,简称FILO。3、只能在栈顶进行插入和删除操作。4、栈顶(top):允许元素插入与删除的一端称为栈顶。5、栈底(bottom):另一端称为栈底。6、压栈(push):栈的插入操作,也称压栈、入栈。7、出栈(pop):栈的删除操作。二、基本操作。1、pus...

2019-12-16 22:42:20 158

原创 C++实现单链表

1、引言。对于链表这种基本数据结构,我们再熟悉不过了。今天,来复习下单链表的实现。单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。-- 百度百科2、实例。2.1 定义节点://定义节点st...

2019-12-12 21:05:07 468 3

原创 C++结构体对齐补齐实例学习

1、结构体的好处。需要使用结构这种聚合数据类型来处理基本数据类型难以处理的场景。2、为什么要内存对齐?2.1 平台原因:不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。2.2 性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。因为为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问...

2019-12-09 23:27:08 218

转载 YouTube排名第一的励志英文演讲《Dream(梦想)》

I don’t know what that dream is that you have, I don't care how disappointing it might have been as you've been working toward that dream, but th...

2019-12-05 21:22:11 573

原创 C++回调函数

1、概述。我们在C/C++编程中经常涉及到回调函数。回调函数到底是什么呢?回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。例如,我们在win32开发里面,使用windows A...

2019-12-05 21:06:59 95

原创 Effective C++读书笔记之条款08:别让异常逃离析构函数。

1、c++禁止析构函数吐出异常,但也不鼓励这样做。来看实例:class Widget{public: Widget(); ~Widget() { }};void g_doSomething(){ vector<Widget> arr;//arr为临时对象,函数结束自动销毁。}在 g_doSomething()中,析构函数在销毁资源的过程中吐出了一个异常,没...

2019-12-04 21:34:37 68

原创 复习复习C++工厂模式

1.引言。工厂模式属于创建型模式,大致可以分为三类,简单工厂模式、工厂方法模式、抽象工厂模式。2、简单工厂模式。2.1 概述。特征: 一个工厂,多个产品。表现: 产品仅有一个虚基类。通过传入参数,创建具体产品对象。优点: 通过工厂获取此虚基类指针,通过运行时多态,子类化实现各种产品功能。缺点: 每次要增加新产品类型时,就需要修改工厂类。2.2 实例。#include <...

2019-12-02 22:09:19 85

原创 C++值传递、 引用传递和指针传递

1、引言。最近复习到了C++传值这块知识点。现在,再来回顾一下。2、说明。2.1 值传递。值传递是最常规的C语言传参方式。形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。2.2 引用传递。引用传递:形参是实参的“...

2019-11-27 22:17:23 238 1

原创 C++知识点之深拷贝和浅拷贝

1、引言。今天复习到C++深拷贝和浅拷贝的知识点。现在,做个梳理。2、浅拷贝。(反例)2.1 实例。#include <iostream>using namespace std;class Person{public: Person(int nHeight, int nWeight); ~Person(); //我们自己来写系统生成的Default Copy ...

2019-11-25 20:56:10 247

原创 设计模式之事件监听模式(C++实现)

1、引言。监听模式,指事件源经过事件的封装传给监听器,当事件源触发事件后,监听器接收到事件对象可以回调事件的方法。顾名思义,它就是对某一目标行为进行监听并且做出应对反映的模式。常见的应用场景有网站在线人数统计,监听用户的行为,win32的消息机制。2、本文实例概述。我在这里就用VC++来举例子以MVC的模式,建立一个一对多的依赖关系。如上图所示:通过MainDialog的添加、修改、删除...

2019-11-20 22:15:29 1100

原创 Windows编程中获取Alt+Tab事件

1、问题。最近遇到一个问题,就是项目软件需要捕获到Alt+Tab事件。一开始无从下手,查了查资料,才搞得定。2、原理。Windows中Alt + Tab组合键被用来在各个程序之间切换。因此,该键盘消息(WM_KEYDOWN/WM_KEYUP)是直接发给系统内核,在应用程序中的消息循环中截获不到。一个常见问题是,可是有的应用程序想在被Alt+TAB 切换到后台之间做点事情,这时候该怎么办?...

2019-11-20 15:52:18 416

原创 C++多线程之临界区CRITICAL_SECTION

最近在项目中遇到一个难题,是工作者线程与UI线程通信的问题。情景再现:在我的主线程里面有对话框界面,它有ListCtrl成员负责向用户展示表格信息。最开始,我把数据计算部分也放到了主线程里面,结果造成了程序很卡。分析原因:其实UI线程在绘制List的时候,速度也挺快的,之所以造成卡顿,是数据量比较大,计算比较慢。结果出现主线程一直在等待数据计算完成。解决方案:创建新的工作者线程,专门去处理数据...

2019-11-12 22:03:34 190

demofolder.zip

这是一个依赖于codeproject上的源文件,使用C++实现的Windows平台下zip压缩解压缩工具类。

2020-05-04

MenuEx.zip

自绘制MFC弹出菜单类,继承自CMenu。支持设置菜单颜色,字体,背景色,选中高亮,添加图标等基本功能。亮点在于去除系统自动添加的边框,并且消除次级菜单与上级菜单的间隙,避免次级菜单选不上的情况。

2019-07-30

C++操作Sqlite

C++操作Sqlite

2021-05-22

FloatBallDemo.zip

MFC实现的一种好玩的浮动窗体。它可以像360悬浮球或者QQ一样吸附停靠在电脑屏幕的左右上三个边缘。鼠标移动到窗体上,会显示完全。

2019-08-02

MFC自绘制微调编辑框

这是一种美观的MFC自绘制微调框。它继承自CWnd类,并且包含一个继承自CEdit的成员。支持自定义颜色、字体,微调功能支持鼠标滚轮、左键长按。

2019-08-27

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除