自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

凝视阳光呦

欢迎来到老凝的寒舍

  • 博客(52)
  • 资源 (1)
  • 收藏
  • 关注

原创 Windows下用crashRpt让C++程序崩溃自动生成dump

windows c++程序崩溃自动收集dump,用于复现BUG

2024-03-03 17:42:15 1117

原创 QT信号槽实现分析

qt元对象宏分析,connect规则和实现原理,发送信号后调用流程

2024-02-26 18:43:23 1149

原创 Pybind11 在C++中运行python脚本操作内存数据

文档在深入使用后需要细细读懂,包括全局只能有一个解释器,如何从C++中返回指针/引用等。基本文档中需要注意的点都会遇到。

2024-02-25 14:07:45 754

原创 Python环境无缝移植,拷贝到其他机器也能使用

python环境直接拷贝到其他机器上时,如何快速衔接环境开始使用?请看文章

2024-02-22 21:28:22 1066

原创 windows C++创建多级目录(支持共享目录)

windows c++创建(多级)目录,支持共享目录

2022-10-14 13:59:50 2163 2

原创 C++ STL map插入效率优化

最近遇到日志队列记录每个客户端ID传送过来的日志,里面的数据量,多的时候非常庞大,从服务器再传到网页效率偶尔感觉较低,故从数据结构和网页Http协议上做了优化map容器的三种插入方式insert emplace emplace_hint效率对比,测试平台为X64 release里面最开始有个结构体,std::map<std::string clientID,logStruct logInfo>用于存储每个客户端的总日志信息。这个Map里面存了大量的日志路径和其他的参数项考虑优化该map

2021-11-26 12:06:58 4269

原创 C++偶遇-菱形继承

昨天在工作中,偶然遇到一个菱形继承的例子,之前觉得这个场景基本不可能出现。现在看来还是存在的。情况:类:xxxMoveDialog–各种自定义功能移动的窗口类:xxxModelDialog–支持自定义表格模型的窗口这两个类共同继承了QDialog.基础模态框类情况是我又想要移动功能,又要集成表格模型。一开始为了省事直接继承了两个类发现编译不过,提示一堆函数不明确,就是QDialog里面他们共同的函数。思考了一下发现是出现了菱形继承。但是xxxMoveDialog和xxxModelDialog是

2021-11-03 10:27:24 133

原创 QT任何控件,实现监听全局事件/windows事件

1.要监听键盘/鼠标事件,一、QT一般的做法的就是继承这个控件,重写该控件的键盘回调函数,当该回调函数被触发时,就是有键盘按键被按下。//键盘按下事件virtual void keyPressEvent(QKeyEvent * event) override;//键盘抬起事件virtual void keyReleaseEvent(QKeyEvent * event) override;keyPressEvent和keyReleaseEvent两个函数就是我们需要重写的两个按钮回调函数,函数

2021-09-17 15:38:24 5890

原创 Typedef关键字在开发中的常应用和注意点

背景:一个库需要更改成Linux/Windows,并且32/64位通用。由于告诉无需只考虑只有GCC编译器的情况,那么我们只需要支持MSVC和G++

2021-07-21 17:48:31 115

原创 QT制作带单位的编辑框QLineEdit

这里先直接放出最终效果图,单位是嵌在编辑框里的原理直接在QLineEdit中加入布局,这个布局会覆盖在输入界面的上边,这样的话我们就可以加入一个按钮,标签等,然后按钮文字调整距离,即可达到带前,后单位的效果这里直接放出代码:在这里插入代码片...

2021-07-01 16:32:03 3785 1

原创 C#调用C++/Qt dll接口的方案,无需修改dll任何地方

前言,C#方式---->托管和非托管一般我们在网上一百度,就是查到托管和非托管两种方法,非托管缺陷很多,在面对接口很多的情况下,非常不好管控,同时C++的动态库还要经过繁多的extern 函数导出,破坏了面向对象的原则。而托管的方式,可以完全保留C++原生的特性,只需要一个中间库来转化两个语言的变量即可假设我们有一个C++dll,我们直接创建C ++动态库,这里我创建了一个QT的动态库,请注意,如果你的C++动态库是QT类型的,托管的库也必须是QT类型的dll,qt的dll就需要根据你的库依赖

2021-06-29 00:06:03 2485 1

原创 QMap定义二进制“<”: 没有找到运算符,及QJson读取toInt全是0的问题

1.QMap:二进制“<”: 没有找到接受“const Key”类型的左操作数的运算符一开始用的是Struct CustomA{ //...... int btnIndex=-1; //....};QMap<QPoint,CustomA> map;这时候提示了如上错误,因为提示的是key,F12进入QPoint的源码查看,发现没有实现 操作符 “<”的函数,QPoint官方自带类无法外部直接添加。出现这个的原因是:QMap是基于红黑树实现的,你插入的时候要不断

2021-05-31 10:53:44 843

原创 Qt编辑框正则后,离开编辑框要注意的地方

一般Qt里使用正则表达式,我们一般这样使用//限制输入0.00-9999.99 QRegExp regx("^\\d{1,4}(\\.\\d{1,2})?$"); QValidator* validator = new QRegExpValidator(regx, ui.lineEdit);//编辑框设置ui.lineEdit->SetValidator(validator);然后编辑框就会生效,很多人使用到了EditFinished信号去做一些结尾处理,比如我这边的组件用于自

2021-04-23 10:55:25 247

原创 opencv源码构建时无法下载组件的解决方法

最近用在学习音视频相关的内容,前两天cmake构建opencv时,提示如下:这很是费解,我于是开启了梯子,重新Configure了一下,结果还是失败???WTF??而且由于有hash校验,不能直接下别人的替换进去,必须一步一步来。于是经过度娘解决之后,发现和不少人的情况不一样。他们的路径上都有:/build/CMakeDownloadLog.txt我找了半天都没找到,我的只有CMak...

2019-10-31 18:44:37 563

原创 ubuntu cmake升级解决与vs2017不同步问题

由于vs2017生成安装cmake时,带的是3.8.x版本的。如果linux下版本比这个低,就会没办法调用然后生成项目。编译器提示:CMake 3.8.x 或更高版本在远程系统上不可用如果linux版本的比vs低。就算在json配置文件指定最低版本,也无法解决这时候就要去卸载linux的cmake了,然后安装更高的版本,步骤如下:1.卸载原来的cmakesudo apt purge ...

2019-10-27 19:06:34 834

原创 C++设计模式-装饰模式

自己也是想了很久这个模式,还是通过代码理解比较好理解,比如一个手机,你给他贴膜,加保护壳,就是给他装饰,但是你拿掉之后。手机还是原来的手机。又或者一个男人,你给他配防弹衣,就是变成了穿防弹衣的人,再把这个穿防弹衣的男人穿头盔,就变成了穿头盔+防弹衣的男人,而如果传进去的参数就是一开始的裸男,那么装饰完,就是只穿头盔的男人。//公共男人抽象类class Man{public: Man(...

2019-10-26 23:52:08 141

原创 进程的切换过程

切换方式进程的切换,实质上就是被中断运行进程与待运行进程的上下文切换。从主观上来理解。只分为两步:1.切换新的页表,然后使用新的虚拟地址空间2.切换内核栈,加入新的内容(PCB控制块,资源相关),实现上下文切换现在从这两句话理解,来看看这些东西到底是什么。1,虚拟地址空间虚拟地址空间,顾名思义:就是虚拟的,不是真的地址空间在早期的计算机中,我们的计算机内存都非常的小。如果计算机内存是...

2019-10-17 18:24:15 18471 10

原创 vector和list在类中定义初始化的问题

关于vector在类中初始化的问题,看下面代码,看起来都没什么问题,一个提示:应输入类型 说明符,另一个提示:vector不是模板这是很常见的错误:**解决办法:1.list和vector在命名空间std里,需要声明using namespace std;或者std::vector name2.vector初始化时使用构造函数初始化,如上面代码的改进:#include<vect...

2019-10-08 18:33:30 1345

原创 进程通信4--信号量(Semaphore)

信号量是什么?(1)信号量本质上是一个具有原子性的计数器,用来描述临界资源的,不能用全局变量count加加减减替换(因为他没有原子性)。(2)信号量以保护临界资源为目的,但他本身也是个临界资源;他控制多个进程对共享资源的访问,通常描述临界资源当中,临界资源的数量,常常被当做锁来使用,防止一个进程访问另外一个进程正在使用的资源(3)其中最简单的信号量=1,也叫做二元信号量(互斥锁),可控制单个...

2019-10-08 14:21:55 311

原创 进程通信3-消息队列

消息队列和之前的管道还有共享内存几乎是一个性质,三种通信都需要获得一块东西,然后通过这个东西通信。命名管道:mkfifo创建一个带名字的管道,然后进程open进来消息队列:msgget创建一个消息队列,然后进程也是msgget进来,只是他发的消息是结构体形式,第一个参数用来当标识,就好比一个储物间,有很多柜子放东西,这个第一个参数就是标记几号柜子的,然后你想从几号柜子取就填几号。共享内存:s...

2019-10-06 23:57:54 111

原创 进程通信2-共享内存

共享内存,就是允许两个不相关的进程访问同一个逻辑内存,然后进行通信1.数据的共享进程间的数据直接访问内存,是最快的进程通信方式,但并未提供同步机制,通常需要用其他的机制来同步,例如信号量2.共享内存代码申请的适合,尽量是一页大小4k的倍数申请,否则容易产生内存碎片这里用一张图来说明:两个不同的虚拟地址通过页表映射到物理空间的同一区域,它们所指向的这块区域即共享内存。代码实现:int ...

2019-10-06 00:21:45 114

原创 进程通信1-管道通信

管道通信顾名思义就是创建一根管道,这个管道有读写两端管道有两种:匿名管道和命名管道1.匿名管道匿名管道只能父子进程间通信,如图,他会创建两个读写端分别对应父子进程,只要父子进程分别关闭读,或者写端,就可以一个进程发送信息给另一个进程。规则:1.如果没有数据可读,或者管道满的时候,read和write调用都会阻塞2.如果有读写端被关闭,调用返回03.写入的数据量小于PIPE_BUF时,...

2019-10-05 22:46:28 140

原创 详细总结:TCP为何是可靠的

TCP协议保证数据传输可靠性的方式主要有5种:1.校验和 发送的数据包的二进制相加然后取反,目的是检测数据在传输过程中的任何变化。 如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。 2.确认应答+序列号 TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。 3.超时重传 当TCP发出一个段后,它启动一个定时器,等待...

2019-10-03 23:31:08 666

原创 头文件循环引用验证:#pragma once和#ifndef

在一个项目中, 如果两次#include “aaa.h”(比如bbb.h包含了aaa.h,而ccc.h即包含bbb.h又包含aaa.h)就会出错,因为相同的类不能定义两次。把aaa.h稍做修改:#ifndef aaa#define aaaclass aaa{};#endif就可以避免这样的问题。因为当你已经包含过这个文件,_aaa_就会有了定义,那么#ifndef的条...

2019-09-23 10:41:32 578

原创 详细注释:简单明了的C++线程池模板

网上分享的基本上是属于纯模板的。不利于新手学习,之前在看视频写项目的时候老师也是用的这个模板。虽然很好,用到的都是可变参数,匿名表达式,和其他一些函数。后来自己到github上找到了一个C++版本的。稍作修改。弄了一个模板。算是比较简洁的线程池需要的:1.线程池的h和cpp文件(线程池创建,运行,添加任务,唤醒线程工作,销毁)2.任务的h和cpp文件,(任务类型的创建,任务需要做的事),这里...

2019-09-23 10:21:36 309

原创 58-求圈内最少几个球可以组成该数组

笔试中的一题。题目如下:给出一个数组。如[1,1,2,2,3],下标为0号球除了自己以外。有且还有1个球颜色和他一样,1号球也是这样2号球也是代表除了自己以外,有且还有2个球和自己颜色相同。3号球同理4号球也是代表除了自己以外,有且还有2个球和自己颜色相同。问:这个圈内最少有几个球,才能组成这样的数组?思路很明确:首先我们分析,最少的情况肯定是数组里面已经有的球,他们相互抵消。然后加上...

2019-09-23 09:37:32 94

原创 C++找出每个数右侧第一个比他大的第一个数

比如一个数组,arr[]={1,2,4,3,5}输出2,4,5这题用到了栈来存下标,然后操作,做法值得学习。要注意的小地方就是输出的结果vecotr。如果操作的次数小于n,要重新减少一下容量。不然返回的vector后面没填满的部分也返回了。#include<iostream>using namespace std;#include<vector>#include...

2019-09-16 16:05:13 605

原创 01背包--数组能否分成两个和相同的数组

[1,2,6,3]可以分成[1,2,3]和[6]思路:此题可以用0,1背包问题来解决,分成的两个数组之和,一定为整个数组之和的一半,所以将背包容量设为初始数组之和的一半即可,最后在判断背包所装的容量是不是整个数组之和的一半。关于01背包问题的超简单解释。我在个人上篇博客已经有详细解答。相信看完这个,在看这题就不难了:01背包问题,最简单的解释!!这里的做法是:数组的每个元素。价值和重量是...

2019-09-16 15:52:36 1288

原创 01背包问题--个人最容易的理解,童叟无欺!

0-1 背包问题:给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi 。问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大? int v[N]={0,8,10,6,3,7,2}; int w[N]={0,4,6,2,2,5,1}; m[i][j]={{0}}; for(int i=1;i<=n;i++)//i表示...

2019-09-16 15:45:07 638

原创 最长不重复字串-map容器做法更易理解

给定一个字符串,找到最长的子串,要求该子串中没有重复的字符。例如:字符串abcabcbb的不含重复字符的 最长 子串为abc,长度为 3。而bbbbbb的不含重复字符的 最长 子串为b,长度为 1。思路都是一样的:记录一个数的初始位置。如果后面出现了同样的字符,就从这个字符下一个相同的位置往下找。#include<iostream>using namespace std;...

2019-09-16 14:46:27 101

原创 定长绳子最多覆盖点

题目描述:数轴上从左到右有n个点,a[0] ,a[1],…,a[n-1],给定一根长度为L绳子,求绳子最多覆盖其中几个点?以下面的数组为例子,如果绳子长度为4,那么最多覆盖的点数应该是568这三个点int a[5] = {1,5,6,8,10};把绳子想成一条蛇。如果长度小于4,那么就头一直增长,增长到4的话,就把尾部收短一些,之后就是头伸一下,尾巴缩一下的挪动。每次比较这里面有几个覆盖的...

2019-09-14 12:55:49 510

原创 所有红色都在绿色右边:需要改变颜色的个数

题目描述有这样一个字符串,只有R和G组成例:RGRGGGR要使得所有的R的位置,离最左侧的距离,都比所有的G要近。可以修改颜色,如:把R改成G,G改成R试问:最少需要修改的个数为多少?思路:这题要使用累加法,举个例子2 3 4 5 6.要算出这个数组0,n的数相加的总和。可以先用一个数组,保存0到n位子相加的总和。比如res[0]=2,res[1]=2+3=5,res[2]=re...

2019-09-14 12:31:50 196

原创 条件限制下:最小买苹果的袋数

题目描述:小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。 可是小易现在只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带。如果不能购买恰好n个苹果,小易将不会购买。输入一个整数n,表示小易想购买n(1 ≤ n ≤ 100)个苹果输出一个整数表示最少需要购买的袋数,如果不能买恰好n个苹果则输出-1比如输入:20输出:3#include...

2019-09-14 12:10:45 177

转载 并查集算法-解决通分支,断路连通问题

首先例题首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判断它们是否连通,或者问你整幅图一共有几个连通分支,也就是被分成了几个互相独立的块。像畅通工程这题,问还需要修几条路,实质就是求有几个连通分支。如果是1个连通分支,说明整幅图上的点都连起来了,不用再修路了;如果是2个连通分支,则只要再修1...

2019-09-14 11:54:42 240

原创 C++单例模式简复习:饿汉式,懒汉式线程安全

单例模式,顾名思义,即一个类只有一个实例对象。饿汉式写法饿汉式写法全局只有一个已经创建好的静态对象,每次要用时就返回这个对象的引用就行,饿汉式在多线程里面同时getInstance()去获取这个对象的时候,是不存在安全问题的,饿汉式写法如下:#include<iostream>using namespace std;class Student{private: Stud...

2019-07-12 10:30:09 301

转载 红黑树(一)之 原理和算法详细介绍

概要目录:1 红黑树的介绍2 红黑树的应用3 红黑树的时间复杂度和相关证明4 红黑树的基本操作(一) 左旋和右旋5 红黑树的基本操作(二) 添加6 红黑树的基本操作(三) 删除概述:R-B Tree,又称为“红黑树”。本文参考了《算法导论》中红黑树相关知识,加之自己的理解,然后以图文的形式对红黑树进行说明。本文的主要内容包括:红黑树的特性,红黑树的时间复杂度和它的证明,红黑树的左...

2019-06-21 13:06:30 190

原创 C++版:冒泡,选择,插入排序,判断回文数字,判断数组中是否有超过一半次数的数字。

最近复习面经刷题准备以后秋招,复习一些经典的东西准备写一下博客记录一下,今天记录一下7大排序中的几个排序判断回文数,还有判断一个数组中出现次数超过一半的数字首先是冒泡排序,通过每个相邻的不断比较,从尾比到头,最后得出有序数列#include<iostream>using namespace std;void swap(int&a, int&b)//交换两个...

2019-06-10 16:22:33 210

原创 Linux下使用libevent做http服务器遇到的一些坑

这次使用了libevent开源库来写http服务器。相比之前全部都是用自己底层代码写,感觉真的简洁太多了,而且这次使用了面向对象方法类封装来写,比较之前也算是一个进步吧,做一些总结如下。1.运行时不要一直printf,最好使用log日志文件的方式。现在网上很多日志文件的cpp下一个用就行2.每个事件框架,在创建时,就写好对应的free代码来释放,不然你写着写着可能就忘了3.http请求报文跟...

2019-05-10 01:40:17 2216

原创 Linux下安装完MySQL之后,include文件夹下没有包含mysql.h头文件的解决办法

无论用源码安装的方式和宝塔安装MySQL,会出现一些必要的头文件在安装目录下存在,但是没有在include 的mysql目录下。其实解决办法很简单。安装libmysqlclient-dev执行安装命令sudo apt-get install libmysqlclient-dev安装完之后,重新进入mysql目录下就有相应的头文件了,如果是用远程调试工具的话,需要重新开启一下项目刷新一下,...

2019-04-17 01:01:11 4922

原创 LeetCode:快慢指针实现删除链表的倒数第N个节点

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗? ListNode* removeNthFromEnd(ListNode* he...

2019-03-31 00:59:17 212

telnet.py登录远程主机

python编写的脚本,可以用来自动telnet远程主机然后输入命令

2019-08-16

空空如也

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

TA关注的人

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