自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

songlipeng的专栏

生活原本就是一个潘多拉宝盒,你打开它就会有无限的惊喜

  • 博客(57)
  • 资源 (9)
  • 收藏
  • 关注

原创 memset函数的坑

结果却发现data中的每一个值都是421075225,并非是想要的25,很奇怪,后来查了一下,原来memset是将目标地址中的每一个字节都赋相同的值,因为int是4个字节,所以是00011001000110010001100100011001(每一个字节都是25--00011001),就是421075225。前几天开发项目时,需要对一个数组中的每一个元素都赋一个相同的整数值,当时想都没想,就直接调用memset函数进行了处理。

2023-03-26 21:20:05 123

原创 析构函数为什么是虚函数

析构函数为什么虚函数,不是虚函数又能怎么样呢,我们先来看个例子class A{public: A() {}; ~A() { cout << "destruct A" << endl; };};class B :public A{public: B() {}; virtual ~B() { cout << "destruct B" << endl; }};int main(){ A* sa = new B;

2022-01-25 22:15:09 4706 1

原创 c++含有string的结构体初始化崩溃问题

含有string的结构体初始化时,不能直接对结构体对象={0}操作,否则会引起崩溃,如struct demo{ std::string info_; int id;};void main(){ demo dev = { 0 };}运行时会直接崩溃掉。对结构体初始化或者使用memset或者采用 demo dev={"",0},这样的形势来初始化,切记...

2021-06-28 22:50:08 1966 3

原创 QIODevice::Text和QIODevice::Truncate区别

最近做项目时,需要将从服务端下载的配置数据保存到本地文件,并保证将该本地文件重新导入到服务端后能够使服务端回复原来的配置,最开始使用的保存的数据代码:QFile file(filename);file.open(QIODevice::ReadWrite|QIODevice::Text)file.write(downloaddata);...

2021-06-07 23:07:11 2736

原创 malloc与calloc、realloc的区别

malloc:函数原型void* malloc(size_t size);动态申请大小为size的内存块,返回指向所分配的连续存储域的起始地址的指针,另外当函数未能成功分配存储空间,就会返回一个NULL指针,因此在使用该函数时应该检测返回值是否为NULL,确保非空后再继续使用;malloc不知道用户请求的内存需要存储的数据类型,因此返回void*; calloc:函数原型...

2020-04-09 22:55:40 287

原创 http中put与post 的区别

put请求是向服务端发送数据,从而改变信息,该请求就像数据库中的update操作一样,用来修改数据内容,但是不会增加数据的种类等,也就是说无论进行多少次put操作,结果并没有不同,10次put创建的与1次创建的请求相同,只会创建一个资源,后面的9次请求只是对以创建的资源的更新;post请求同put请求类似,都是向服务端发送数据,但是会改变数据终端类资源,就像数据库的insert操作一样,会创建...

2020-04-02 11:25:01 504

原创 linux系统下静态库及动态库的生成及使用方法

1.创建myAPI.h文件内容如下:int ADD(int a,int b);int MINUS(int a,int b);2.创建myAPI.cpp文件#include"myAPI.h"int ADD(int a,int b){return a + b;}int MINUS(int a,int b){return a - b;}3.创建main.cpp文件...

2020-03-29 17:44:33 236

原创 _stdcall、_cdecl、_fastcall三者区别

_stdcall:windows默认的函数调用协议;函数参数从右向左入栈;c++编译后函数名字被修改为:?functionname@@YG****@Z;函数自己清除栈里面的参数内容;_cdecl:c/c++默认的函数调用;函数参数从右向左入栈;c++编译后函数名字被修改为:?functionname@@YI****@Z;;调用者清除栈里面的参数内容(程序中有可变参数时候用到);_fas...

2020-03-25 13:40:16 163

原创 多线程常被问的问题之一

线程的概念:线程是进程中执行运算的最小单位,是进程中的一个实体,线程不具有自己的系统资源,但是可以和同属于一个进程的其他线程共享进程中的资源;线程的好处:1、易于调度。2、提高并发性。通过线程可以方便的实现并发,进程可以创建多个线程来执行同一程序的不同部分。3、开销少。创建线程比创建进程快很多,所需开销少;4、利于充分发挥多工能处理器的功能。进程和线程的区别:1、进程是资源分配的基...

2020-03-22 22:27:56 234

原创 vs2015开发ffmpeg出现error LNK2019: 无法解析的外部符号

用vs2015开发ffmpeg时,头文件,lib文件都正确设置,但是在编译时候提示error LNK2019: 无法解析的外部符号,经研究发现ffmpeg的库都是c语言的,而我编译器是c++,故需要在#include头文件时需要加上关键字 extern "C"extern "C"{#include "libavutil/frame.h"#include "libavutil/mem.h...

2020-01-20 16:17:44 1077

原创 运行qt可执行程序(xxx.exe)提示this application failed to start because it could not find or load the QT ....

在自己电脑上面写了一个qt的demo,运行没问题,然后在其他人电脑上面运行时,提示this application failed to start because it could not find or load the QT platform plugin "windows";解决方案,找到C:\QT\Qt5.9.1\5.9.1\msvc2015_64\plugins\platfo...

2020-01-08 16:47:47 2022 3

原创 LeetCode之机器人大冒险

题目:机器人初始位置在原点(0, 0)。小伙伴事先给机器人输入一串指令command,机器人就会无限循环这条指令的步骤进行移动。指令有两种:U: 向y轴正方向移动一格R: 向x轴正方向移动一格。不幸的是,在 xy 平面上还有一些障碍物,他们的坐标用obstacles表示。机器人一旦碰到障碍物就会被损毁。给定终点坐标(x, y),返回机器人能否完好地到达终点。如果能,返回true;否...

2019-11-23 16:48:29 311

转载 c++内存泄漏检测(crt)

<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-d284373521.css"> <link rel="...

2019-11-06 11:37:20 964

原创 opencv获取图像像素方法汇总

opencv获取图像像素方法主要是3种,分别是指针风格、迭代器风格、动态地址风格,代码如下:Mat image = imread(strPic); //指针 int iColumn = (image.cols)*(image.channels()); int iRow = image.rows; for (size_t i = 0; i < iRow; i++) { uc...

2019-10-14 22:19:04 2274

原创 qt信号量理解及使用

信号量可以理解为互斥量的延伸或者说是互斥量的泛化,一个互斥量只能锁一次,但信号量则可以获取多次,信号量经常在多线程或多进程中用来保护一定数量的共享资源,线程必须要获取一个信号量,举个例子:有一个餐馆,里面有十个位置, 最初都是空的,这个时候如果进来十二个人,则看门人仅允许十个人进入,然后锁上门,剩下的二个人则必须在大门等待,此后来的所有的顾客也不得不在门口等待,这时如果里面有个人...

2019-10-14 20:04:32 8855 2

转载 tcp面试题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

2019-10-11 14:27:26 325

原创 c++实现Base64加密方式

网络上传输8bit信息最常用的传输方式就是base64,它通过查找表的方式,将一种基于64(2^6)个可打印字符来表示二进制数据;也就是说将任何要传递的信息转换为由A-Z,a-z,0-9,+/构成的64个字符中的一部分;如现在有ABD三个字符,那么如何将这三个字符转换为base64编码的方式呢,如下图所示:从图上可以看出,编码方式由原来的8bit转换为6bit,然后每一6bit前面补齐...

2019-09-21 22:54:01 1079

原创 c++中new与malloc的区别

工作中经常用到动态内存的申请,但是大部分都是用的new,中昨天突然有人问到new与malloc的区别,回答的模模糊糊,模棱两可的,今天趁此机会好好总结一下new和malloc的区别:1、new/delete是c++中的关键字,malloc/free是c中的系统函数,当然c++中也支持malloc/free,不过效率不及new/delete;2、使用new操作符申请内存分配时无须指定内存块的...

2019-09-19 22:17:01 692

原创 opencv中的affineTranform仿射变换

仿射变换主要是将图像旋转,拉伸,它通过一个矩阵将源图像像素变换到指定的目标图像的位置,这个矩阵成为变换矩阵。仿射变换分为两步,第一步是得到变换矩阵,第二步是进行变换。void CImgPro::SetAffineTranform(const string strPic){ Mat imgSrc = imread(strPic); Point2f ptSrc[3]; Point2f p...

2019-09-17 21:55:27 252

原创 LeetCode之无重复字符的最长子串的长度

输入:"asdfasd"输出为4(最长子串为asdf)解答思想:1、从第一个字符str[i]开始,遍历每一个字符作为起始位置的子串长度;2、针对每次遍历,依次将str[i]后面每个字符作为一个数组的索引值(数组初始化全部为0),当该字符出现时,该索引对应的值加1,当某一个索引对应的值变成2时,本次循环结束,循环的次数即为本次循环的子串长度,开始进行第二个字符的循环;3、求最长子...

2019-09-10 21:42:12 144

原创 详细介绍从输入一个URL网址到展示出页面中间发生了什么

我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要浏览的内容。在这个看似 简单的用户行为背后,到底隐藏了些什么呢?1.概述 输入一段URL之后,比如输入www.google.com后浏览器首先通过DNS服务会对这个域名进行解析,也就是转换为IP地址的形式,然后向该IP对应的web服务器发送请求,建立tcp连接等浏览器发送完HTTP Request...

2019-07-20 16:16:15 796

原创 opencv实现字符分割

opencv字符分割流程是:1、图像单通道化,2、图像二值化;3、获取图像中的轮廓;4、实现分割。代码如下:void SegmentChar(const string strPic){ Mat img = imread(strPic, 0); if (!img.data) { return; } Mat threshImg; threshold(img, threshI...

2019-07-15 10:41:23 8990 5

原创 golang结构体tag编译错误的问题

写了一个带标签的结构体type server struct{ XMLName xml.Name 'xml:"server"'}编译错误field tag must be a string,后来发现是后面标签上引号不正确,不应该是回车键旁边的单引号,而是数字键1旁边的单引号type server struct{ XMLName xml.Name `xml:"ser...

2019-07-13 17:15:15 3519

原创 排序算法之快速排序

思路:1,确定一个参考元素2,数组中小于参考元素的放左边,大于参考元素的放右边3,将参考元素赋值给中间位置,4递归左边和右边的元素;void quikSort(int data[],int iBegin,int iEnd){ if(iBegin > iEnd) { return; } int i = iBegin; int j = iEnd; int t; int ...

2019-07-13 11:20:16 124

原创 排序算法之基数排序

基数排序介绍:又称为桶子排序,主要思想是利用数组元素的关键值,将这个数组分布在各个桶里面:先把数组元素个位数相同的放在一个桶里面,然后拿出来,再把十位数相同的放在要给桶里面,再拿出来,直到所有位数都遍历完为止,以数组{23,456,7,12,222,5,999,322,1}为例:先对数组元素个位数分桶:桶0:桶1:1桶2:12,222,322桶3:23桶4:桶5:5桶6:456...

2019-07-09 13:57:13 264

原创 c++读取文件路径 “\” "\\" "/"的问题

c++代码读取多层文件路径时,注意一定要用‘/’或者‘\\’,而不要用‘\’,因为如果用‘\’则路径会错误。比如std::string strFilePath = "D:\opencv3.1.0\opencv\sources\samlpes\data\data01.xml"c++实际在编译运行过程中路径名称就变成了“D:opencv3.1.0opencvsourcessamlpesdatadat...

2019-07-08 16:25:19 3986

原创 opencv图像增强技术之一

处理图像避免不了图像增强技术,何为图像增强呢,简单来说就是要改变视觉效果,图片还是同一副图片,但是给人的感官不一样,有目的地强调图像的整体或局部特性,将原来不清晰的图像变得清晰或强调某些感兴趣的特征,扩大图像中不同物体特征之间的差别,抑制不感兴趣的特征,使之改善图像质量、丰富信息量,加强图像判读和识别效果,满足某些特殊分析的需要。在opencv中有多种图像增强的技术,可以分为基于频...

2019-07-06 12:45:34 2363

原创 opencv的通道分离split函数与通道合并merge函数

split函数主要将图像的通道进行分离,第一个参数为要分离通道的图像矩阵序列,第二个输出参数为分离后的通道数组序列,顺序为BGR,分离例子如下://Mat image = imread("1.png");std::vector<Mat> imgarry;split(image,imgarry);imshow("B",imgarry[0]);imshow("G",imgarr...

2019-07-02 14:10:36 468

原创 c++实现生产则消费者模式

简单的生产者消费者模式,缓冲区采用stack,当然你也可以使用list circle-buffer等数据结构;读写数据时要加锁,实现线程的同步,这里采用条件变量来处理读写动作,先锁定互斥变量,然后调用wait循环检查stack条件(写入时检查是否已满,读取时检查是否为空),直到满足条件,然后通知其它线程。代码如下:#include<stack>#include<mu...

2019-06-25 10:40:47 589

原创 linux系统下第一个c++程序

系统安装的是ubuntu18.04,编辑器是vim,编译器是gcc,没有的话,打开命令端,输入:sudo apt-get install gcc.安装过程中问题是否更新,选择Y。安装完成后,输入 gcc -v检查版本号,如果成功,则说明安装成功。vim一般系统自带的有,不用再手动安装了。 下面新建第一个c++程序。打开终端,输入 vim,会出现vim编辑界面,此时处于命令状态...

2019-06-20 22:33:34 409

原创 c++ 计算两个数的最大公约数

int GetCommonMeasure(int&a,int&b){ if(!(a&&b)) { return -1; } if(a%b == 0) { return b; } else { int c = a%b; a = b; b = c...

2019-06-19 17:24:58 970

原创 opencv实现图片的素描化

流程比较简单,图片的灰度化--中值滤波--拉普拉斯滤波检测边缘--二值化 Mat image = imread("lin.jpg",1); //灰度图 cvtColor(image, image, CV_BGR2GRAY); const int iMediaFilterSize = 7; //中值滤波 medianBlur(image, image, iMediaFi...

2019-06-18 22:45:28 1617

原创 c++11 delete用法

在一个类中,如果不想某些成员函数被外界对象访问,一般我们会设置为private,但是这样不太美观,在c++11中,新增了一种特性,delete 我们在一个成员函数后面添加“=delete”后,该成员函数就不能生成函数实体(即不能定义该函数,换句话说,只允许声明,不允许定义),否则会编译出错。如:class A{public:A(){};~A(){};public:void Func(...

2019-06-18 20:33:05 1007

转载 图像的腐蚀与膨胀(转发)

转发图像的腐蚀与膨胀,写的很详细 网上找到很多个版本,经过自己分析对比概念,发现有些说自己方法是正确的,但是我觉得这个大牛的分析才是正确的。图像的膨胀与腐蚀、细化原理:在特殊领域运算形式——结构元素(Sturcture Element),在每个像素位置上与二值...

2019-06-18 17:02:49 1964

原创 求一个整数转换为二进制后1的个数

方法1:将该整数每次向右移动一位,计算末尾为1的次数即可,代码如下:int n = 7;int iCount = 0;while(n){ if(n&1) { iCount++; } n>>=1;}最后iCount结果为3方法2:把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0,那么一个整数的...

2019-06-12 09:59:32 2087

转载 window下搭建redis集群

https://www.cnblogs.com/tommy-huang/p/6240083.html

2019-06-11 17:03:42 104

原创 opencv中createTrackBar的问题

今天在写一个opencv的应用的时候,先调用了nameWindow("变化窗口",1);后面调用函数createTrackBar("变化窗口","亮度",......),当调用完函数后,发现窗体上没有出现TrackBar,最后查找资料发现是因为createTrackBar函数的第二个参数与nameWindow第一个参数不一致导致的,将这两个参数改为一致,问题即可解决。。。...

2019-06-10 22:13:38 2142 2

原创 leetcode之两数相加

输入:数组,整数target;输出:从数组中找到两个数,使得这两个数之和为target,并输出这两个数的索引值看到这个题目,首先想到的一种方法就是暴力遍历,也就是先遍历数组中的每一个元素number[i],然后针对该元素再次遍历数组,当二次遍历的元素number[j]与number[i]的和为target的时候,即查到了结果。但是这种方法时间复杂度为O(N*N),太耗时;方法二,可...

2019-06-05 20:08:27 127

原创 c++11之final用法

c++11中出现了final关键字,和java中的final一样,c++11中的final关键字是使派生类不可覆盖基类的虚函数。class A{ public: A(){}; ~A(){}; virtual void Fun() final { // }}class B:public A{ public: ...

2019-06-04 16:54:37 2523

原创 c++string类的实现

相信很多人跟我一样,string用了不下几千几万次,但是真的让你去实现这个类,不见得马上能写出来吧,今天被问到这个类的实现,还是懵了一会,不多说,我的实现代码如下:class MyString{public: MyString(const char* str = NULL); MyString(const MyString& str); MyString& oper...

2019-05-22 22:53:04 154

windows核心编程(第五版)

众所周知的windows核心编程,让您对windows操作系统,应用程序,多线程等有一个全方面的理解与学习

2013-06-28

windows核心编程(pdf版)

众所周知的windows核心编程 让您对整个windows操作系统,应用程序,多线程等有一个全方面的理解与学习

2013-06-28

数据结构c++语言描述(pdf版)

c++数据结构算法,很不错的一本书,对各种算法及链表,二叉树,排序等讲解的很透彻,建议有兴趣的同行可以下载看看

2013-06-28

c++编写的读取两个文件内容并相加读入到另外一个文件中

这是我用c++编写的程序,首先分别从两个文件中读取文件中的数据,然后再将这两个文件中的数据相加,并把和写到另外一个文件中,适合正在纠结与文件读写的学者

2013-05-30

mfc的菜单操作

基于MFC实现的菜单功能,有运行结果,操作简单,对于初涉MFC 的学者有很大帮助

2013-05-29

MFC中BitMapButton的设计与实现

这是我在学习MFC时编写的实现BitMapButton,在VC2005上面实现的,有结果显示有兴趣的学着可以看看

2013-05-29

c++文件的简单读取

在vc 2005上编写的程序,可以实现文件简单的读取,方便初学者使用学习

2013-05-29

基于vc2005用opengl编写的很简单程序,适于vc初学者使用

基于vc2005用opengl编写的很简单程序,适于vc初学者使用,一看即会,不用烦恼

2012-07-19

自动化专业毕业设计(单片机c51编写超级电容检测的程序)

本文采用c51检测超级电容,并能够显示电容两端电压,且能实现仿真,有protel仿真图片

2012-07-18

空空如也

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

TA关注的人

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