![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 65
凝视阳光、
啥?还有简介?
展开
-
Windows下用crashRpt让C++程序崩溃自动生成dump
windows c++程序崩溃自动收集dump,用于复现BUG原创 2024-03-03 17:42:15 · 1326 阅读 · 0 评论 -
QT信号槽实现分析
qt元对象宏分析,connect规则和实现原理,发送信号后调用流程原创 2024-02-26 18:43:23 · 1157 阅读 · 0 评论 -
Pybind11 在C++中运行python脚本操作内存数据
文档在深入使用后需要细细读懂,包括全局只能有一个解释器,如何从C++中返回指针/引用等。基本文档中需要注意的点都会遇到。原创 2024-02-25 14:07:45 · 774 阅读 · 0 评论 -
Python环境无缝移植,拷贝到其他机器也能使用
python环境直接拷贝到其他机器上时,如何快速衔接环境开始使用?请看文章原创 2024-02-22 21:28:22 · 1256 阅读 · 0 评论 -
windows C++创建多级目录(支持共享目录)
windows c++创建(多级)目录,支持共享目录原创 2022-10-14 13:59:50 · 2203 阅读 · 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 · 4362 阅读 · 0 评论 -
C++偶遇-菱形继承
昨天在工作中,偶然遇到一个菱形继承的例子,之前觉得这个场景基本不可能出现。现在看来还是存在的。情况:类:xxxMoveDialog–各种自定义功能移动的窗口类:xxxModelDialog–支持自定义表格模型的窗口这两个类共同继承了QDialog.基础模态框类情况是我又想要移动功能,又要集成表格模型。一开始为了省事直接继承了两个类发现编译不过,提示一堆函数不明确,就是QDialog里面他们共同的函数。思考了一下发现是出现了菱形继承。但是xxxMoveDialog和xxxModelDialog是原创 2021-11-03 10:27:24 · 137 阅读 · 0 评论 -
QT任何控件,实现监听全局事件/windows事件
1.要监听键盘/鼠标事件,一、QT一般的做法的就是继承这个控件,重写该控件的键盘回调函数,当该回调函数被触发时,就是有键盘按键被按下。//键盘按下事件virtual void keyPressEvent(QKeyEvent * event) override;//键盘抬起事件virtual void keyReleaseEvent(QKeyEvent * event) override;keyPressEvent和keyReleaseEvent两个函数就是我们需要重写的两个按钮回调函数,函数原创 2021-09-17 15:38:24 · 5994 阅读 · 0 评论 -
Typedef关键字在开发中的常应用和注意点
背景:一个库需要更改成Linux/Windows,并且32/64位通用。由于告诉无需只考虑只有GCC编译器的情况,那么我们只需要支持MSVC和G++原创 2021-07-21 17:48:31 · 120 阅读 · 0 评论 -
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 · 2526 阅读 · 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 · 866 阅读 · 0 评论 -
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 · 848 阅读 · 0 评论 -
C++设计模式-装饰模式
自己也是想了很久这个模式,还是通过代码理解比较好理解,比如一个手机,你给他贴膜,加保护壳,就是给他装饰,但是你拿掉之后。手机还是原来的手机。又或者一个男人,你给他配防弹衣,就是变成了穿防弹衣的人,再把这个穿防弹衣的男人穿头盔,就变成了穿头盔+防弹衣的男人,而如果传进去的参数就是一开始的裸男,那么装饰完,就是只穿头盔的男人。//公共男人抽象类class Man{public: Man(...原创 2019-10-26 23:52:08 · 142 阅读 · 0 评论 -
vector和list在类中定义初始化的问题
关于vector在类中初始化的问题,看下面代码,看起来都没什么问题,一个提示:应输入类型 说明符,另一个提示:vector不是模板这是很常见的错误:**解决办法:1.list和vector在命名空间std里,需要声明using namespace std;或者std::vector name2.vector初始化时使用构造函数初始化,如上面代码的改进:#include<vect...原创 2019-10-08 18:33:30 · 1363 阅读 · 0 评论 -
头文件循环引用验证:#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 · 591 阅读 · 0 评论 -
详细注释:简单明了的C++线程池模板
网上分享的基本上是属于纯模板的。不利于新手学习,之前在看视频写项目的时候老师也是用的这个模板。虽然很好,用到的都是可变参数,匿名表达式,和其他一些函数。后来自己到github上找到了一个C++版本的。稍作修改。弄了一个模板。算是比较简洁的线程池需要的:1.线程池的h和cpp文件(线程池创建,运行,添加任务,唤醒线程工作,销毁)2.任务的h和cpp文件,(任务类型的创建,任务需要做的事),这里...原创 2019-09-23 10:21:36 · 317 阅读 · 0 评论 -
并查集算法-解决通分支,断路连通问题
首先例题首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判断它们是否连通,或者问你整幅图一共有几个连通分支,也就是被分成了几个互相独立的块。像畅通工程这题,问还需要修几条路,实质就是求有几个连通分支。如果是1个连通分支,说明整幅图上的点都连起来了,不用再修路了;如果是2个连通分支,则只要再修1...转载 2019-09-14 11:54:42 · 243 阅读 · 0 评论 -
C++单例模式简复习:饿汉式,懒汉式线程安全
单例模式,顾名思义,即一个类只有一个实例对象。饿汉式写法饿汉式写法全局只有一个已经创建好的静态对象,每次要用时就返回这个对象的引用就行,饿汉式在多线程里面同时getInstance()去获取这个对象的时候,是不存在安全问题的,饿汉式写法如下:#include<iostream>using namespace std;class Student{private: Stud...原创 2019-07-12 10:30:09 · 307 阅读 · 0 评论 -
C++:求两个数的二进制有几位是不相同的
解法:首先把两位数异或,得到的结果,通过自身跟自身-1相与,直到等于0为止举个例子:1跟21的二进制数是00012的二进制数是0010两位数异或是:0011 这个数对应的十进制为3然后 3跟(3-1)相与:3跟2相与00110010————0010现在相与完结果为2,2再跟2-1相与00100001————0000现在为0了。执行了两次相与。所以1跟2的二进制...原创 2019-03-19 21:23:19 · 953 阅读 · 0 评论 -
力扣:判断是否为单值二叉树
题目描述:如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。解决思路:先从跟结点遍历,然后遍历每个结点的左右子结点。如果为空结点则返回true,如果不为空,判断判断左结点是否和根结点相等,右结点是否和跟相等代码为: bool isUnivalTree(TreeNode* root) { ...原创 2019-03-21 01:08:15 · 381 阅读 · 0 评论 -
Linux C:简单udp组播,服务器端代码实现
udp广播跟组播实现差不多,但是广播只能在局域网下,而多播(组播)也可以在广域网下使用。这次分享的是组播的服务器代码。主要流程:创建套接字-》绑定服务器端口-》开放服务器广播权限-》创建广播地址段的客户端-》开始在这个网段广播客户端只要加入这个对应端口和网段就可以收到组播的内容了#include <stdio.h>#include <stdlib.h>#inclu...原创 2019-03-25 12:19:54 · 2858 阅读 · 2 评论 -
C++封装DLL易语言调用,实现功能菜单
学习C++也半年了,昨天突然想到能不能用C++写的DLL给易语言调用,突然冒出了这个想法后来学习了半天,终于实现了。先放上效果图一览,这篇文章适合刚入门dll调用的萌新(不是小白 ),结尾会分享dll和全部源代码,下个阶段我还会更新CS透视自瞄的dll和dll里面全部代码的注释希望可以帮到大家。C++封装DLL具体流程我这里用的是大众的方法。第一步:先创建一个dll动态库—>添加自...原创 2019-03-18 20:49:24 · 4592 阅读 · 0 评论 -
MFC:CString类型转化成int和char[]通用办法
CString 转化 成int类型:CString str_port="12345";int port = 0;port = _ttoi(str_port); //转化成10进制;CString转化成char[],函数:void CStringToChar(CString str, char ch[]){ char* tmpch; int wLen = WideCharTo...原创 2019-03-29 23:30:17 · 653 阅读 · 0 评论 -
LinuxC多线程pthread并发服务器(考虑线程锁,线程复用,端口复用)
最近从windows转到linux学习了一段时间了。其实tcp服务器本质基本都一样。这次上传一个简单的linux下多线程并发服务器。该服务器可以接收128个客户端同时连接,并且加入了互斥锁,排除了多个客户端同时间连接时出现的问题。并且当前一个客户端关闭连接时,后面连接的客户端可以继续使用该线程。#include <stdio.h>#include <stdlib.h>...原创 2019-03-23 16:32:33 · 485 阅读 · 0 评论 -
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 · 214 阅读 · 0 评论 -
Linux C:epoll实现多路IO转接,并发服务器
epoll相比于之前学的多进程/多线程的并发服务器,以及select和poll来说效率都高得多,并且连接数不受限制,采用类似树的结构。特此分享一下本人在Linux下写的epoll简单的并发服务器端的代码。#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd...原创 2019-03-24 01:42:51 · 279 阅读 · 0 评论 -
Linux:用libevent库创建epoll的IO复用并发服务器
libevent是一个开源是并且可以跨平台的库,可以去官网http://libevent.org/下载后在Linux中解压,然后通过源码安装的方式安装。通过libevent可以轻松实现epoll的IO复用并发服务器,无需再自己定义根结点和上树删除结点的一些操作。以下用Linux下的epoll简单服务器端的代码作为例子。需要比较注意的是回调函数的用处。以后还会持续接触到。#include &l...原创 2019-03-27 01:03:57 · 358 阅读 · 0 评论 -
Linux:select判断一个远程服务器的端口是否开放
思路:socket创建套接字之后->connect连接;但是存在一个问题,connect之后如果端口是不通的,那么阻塞默认是会过 几十秒才会重新connect。所以这时候我们要设置connect为非阻塞。非阻塞的情况下:connect不管怎么样立即返回-1,所以不能当作判断的依据。所以要通过select判断是否可对这个服务器写消息,来判断是否该服务器的端口开放。代码如下:#inc...原创 2019-03-29 00:39:38 · 921 阅读 · 0 评论 -
Linux下安装完MySQL之后,include文件夹下没有包含mysql.h头文件的解决办法
无论用源码安装的方式和宝塔安装MySQL,会出现一些必要的头文件在安装目录下存在,但是没有在include 的mysql目录下。其实解决办法很简单。安装libmysqlclient-dev执行安装命令sudo apt-get install libmysqlclient-dev安装完之后,重新进入mysql目录下就有相应的头文件了,如果是用远程调试工具的话,需要重新开启一下项目刷新一下,...原创 2019-04-17 01:01:11 · 4953 阅读 · 0 评论 -
Linux下使用libevent做http服务器遇到的一些坑
这次使用了libevent开源库来写http服务器。相比之前全部都是用自己底层代码写,感觉真的简洁太多了,而且这次使用了面向对象方法类封装来写,比较之前也算是一个进步吧,做一些总结如下。1.运行时不要一直printf,最好使用log日志文件的方式。现在网上很多日志文件的cpp下一个用就行2.每个事件框架,在创建时,就写好对应的free代码来释放,不然你写着写着可能就忘了3.http请求报文跟...原创 2019-05-10 01:40:17 · 2233 阅读 · 0 评论 -
C++版:冒泡,选择,插入排序,判断回文数字,判断数组中是否有超过一半次数的数字。
最近复习面经刷题准备以后秋招,复习一些经典的东西准备写一下博客记录一下,今天记录一下7大排序中的几个排序判断回文数,还有判断一个数组中出现次数超过一半的数字首先是冒泡排序,通过每个相邻的不断比较,从尾比到头,最后得出有序数列#include<iostream>using namespace std;void swap(int&a, int&b)//交换两个...原创 2019-06-10 16:22:33 · 215 阅读 · 0 评论 -
红黑树(一)之 原理和算法详细介绍
概要目录:1 红黑树的介绍2 红黑树的应用3 红黑树的时间复杂度和相关证明4 红黑树的基本操作(一) 左旋和右旋5 红黑树的基本操作(二) 添加6 红黑树的基本操作(三) 删除概述:R-B Tree,又称为“红黑树”。本文参考了《算法导论》中红黑树相关知识,加之自己的理解,然后以图文的形式对红黑树进行说明。本文的主要内容包括:红黑树的特性,红黑树的时间复杂度和它的证明,红黑树的左...转载 2019-06-21 13:06:30 · 190 阅读 · 0 评论 -
力扣题目:929. 独特的电子邮件地址
今天在力扣上看到了这个题目。这题其实 测试用例有纰漏。所有的测试用例前面的本地名有效的‘.’符号最多只有2个。鉴于有点特殊。特地放到VS编译器上调试。最终得出了完全正确的代码每封电子邮件都由一个本地名称和一个域名组成,以 @ 符号分隔。例如,在 alice@leetcode.com中, alice 是本地名称,而 leetcode.com 是域名。除了小写字母,这些电子邮件还可能包含 ‘.’...原创 2019-03-19 16:31:24 · 581 阅读 · 0 评论