- 博客(41)
- 收藏
- 关注
原创 cannot find -lmysqlclient 错误解决
是因为编译找的动态库是根据去找/usr/lib文件夹下的库,而centos会默认将mysql相关的库装再/usr/lib64/mysql下,所以才会出现找不到-lmysqlclient的错误。将/usr/lib64/mysql下面的libmysqlclient.so文件复制到/usr/lib下即可解决。
2023-11-17 20:16:39
765
1
原创 贪心算法----区间选点
题目:给定 N 个闭区间 [ai,bi],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。输出选择的点的最小数量。位于区间端点上的点也算作区间内。输入样例:3-1 12 43 5思路解题思路:先将每个区间按右端点从小到大排序,然后每次枚举每个区间,当某个区间内已经取了点时,直接跳过即可,否则取每个区间最右端的端点。代码#include <iostream>#include <algorithm>using namespace std;con
2022-05-07 16:07:58
301
原创 二叉树详解
前序遍历//前序遍历:根 左子树 右子树void PrevOrder(BTNode* root){ //root为空是递归的终止条件 if (root == NULL) { printf("NULL "); return; } printf("%c ", root->x);//访问根,这里进行打印操作,也可进行其他操作 PrevOrder(root->left);//递归访问左子树 PrevOrder(root->right);//递归访问右子树}中
2022-04-15 20:18:53
232
原创 虚函数详解
C++虚函数的实现原理(底层结构)每一个含有虚函数的类都至少有一个与之对应的虚函数表,其中存放着该类所有的虚函数对应的指针。实现原理当类中存在虚函数时,编译器会再类中自动生成一个虚函数表。虚函数表是一个存储类成员函数指针的数据结构。虚函数表由表一起自动生成和维护。virtual修饰的成员函数会被编译器放入虚函数表中。存在虚函数时,编译器会为对象自动生成一个指向虚函数表的指针(通常称为vptr)具体的一个实现过程父类的fun()是个虚函数,所以编译器会跟父类对象自动添加了一个vptr
2022-04-13 08:59:42
1009
原创 快速排序算法
插入排序void insert_sort(){ for (int i = 1; i < n; i ++ ) { int x = a[i]; int j = i-1; while (j >= 0 && x < a[j]) { a[j+1] = a[j]; j -- ; } a[j+1] = x; }}
2022-04-11 20:15:54
111
原创 通过CSS给Qt控件添加样式
通过CSS给Qt控件添加样式第一步:建立 .CSS文件,并添加到资源文件中去第二步:用VScode打开CSS文件进行编辑,写出对应的样式第三步:在主函数中进行调用CSS文件,改变控件样式QFile f1; //设置登录窗口和添加窗口的样式 f1.setFileName(":/dlg.css"); f1.open(QIODevice::ReadOnly); QString strQss = f1.readAll(); //注:有多个窗口,代码中m_dlgLo
2022-04-06 10:11:48
3978
原创 QTableWidget的操作
QTableWidget的操作 //清理表格 ui->tableWidget->clear(); //自己设计表头 QStringList l; l<<"序号"<<"id"<<"姓名"<<"年龄"<<"年级"<<"班级"<<"学号"<<"电话"<<"微信"; ui->tableWidget->setColumnCount(9);/
2022-04-06 10:03:45
208
原创 Qt中快速批量模拟增加数据
快速增加数据在日常开发中,比如写一个学生管理系统,需要模拟增加数据,如果一条一条的调用sql语句进行添加稍稍大量的数据就会很慢,本人亲测,比调用单个增加函数快上很多,增加两三白条数据就是那么一两秒的事下面给一个快速的操作第一步:首先定义一个对应的结构体类,方便操作例:struct StuInfo{ int id; QString name; quint8 age; quint16 grade; quint16 uiclass; quint32 stu
2022-04-06 09:55:05
1056
原创 QTreeWidget与QStackedWidget的关联操作
QTreeWidget与QStackedWidget的关联通过点击QTreeWidget来控制QStackedWidget中的page页面切换QTreeWidget有一点击的槽函数void MainWindow::on_treeWidget_itemClicked(QTreeWidgetItem *item, int column){ //QTreeWidgetItem *item=item; if(item->text(column)=="学生管理") {
2022-04-06 09:40:23
1842
4
原创 Json以及Json在Qt中的使用
1、简介JSON:一种轻量级的数据交换格式一般.json后缀高效简单2、使用组织数据:用于数据的网络传输组织数据:用于磁盘文件实现数据的持久化存储用在登录 记录用户名密码等,下次打开软件,自动填充。3、Json数组Json数组使用[]表示,[]里面是元素,元素间使用 , 分隔,最后一个元素后面,没有 ,一个Json数组,支持多种不同的数据类型,包括:整形,浮点型,字符串,json数组,json对象,空值-null(null)Json数组中嵌套Json数组,父子关系Json数组嵌套Js
2022-04-03 13:03:32
10898
1
原创 互斥量,事件对象,信号量对象,关键代码段(临界区)
互斥量互斥量又称互斥锁。互斥量是一个可以处于两态之一的变量:解锁和加锁。如果不需要信号量的计数能力,有时可以使用信号量的一个简化版本,称为互斥量(mutex)。互斥量仅仅适用于管理共享资源或一小段代码。由于互斥量在实现时既容易又有效,这使得互斥量在实现用户空间线程包时非常有 用。为协调共同对一个共享资源的单独访问而设计的。#include <stdio.h>#include <windows.h>#include <process.h>#define N
2022-03-30 19:09:44
458
原创 WaitForMultipleObjects
作用等待直到一个或所有指定对象处于信号状态或超时间隔过去。句法DWORD WaitForMultipleObjects( [in] DWORD nCount, // 要监测的句柄的组的句柄的个数 [in] const HANDLE *lpHandles, //要监测的句柄的组 [in] BOOL bWaitAll,//TRUE 等待所有的内核对象发出信号 FALSE 任意一个内核对象发出信号 [in] DWORD dwMillise
2022-03-28 19:38:07
553
原创 WaitForSingleObject 函数
作用等待直到指定的对象处于信号状态或超时间隔过去。句法DWORD WaitForSingleObject( [in] HANDLE hHandle, [in] DWORD dwMilliseconds);参数解释[in] hHandle对象的句柄。有关可以指定其句柄的对象类型的列表,请参阅以下备注部分。如果在等待仍处于挂起状态时关闭此句柄,则函数的行为未定义。句柄必须具有SYNCHRONIZE访问权限。[in] dwMilliseconds超时间隔,以毫秒为单位。如果指定了
2022-03-28 17:52:50
911
原创 程序自启动与隐藏
##程序添加到启动项void AddToSystem(){ HKEY hKEY; char CurrentPath[MAX_PATH]; char SysPath[MAX_PATH]; long ret = 0; LPSTR FileNewName; LPSTR FileCurrentName; DWORD type = REG_SZ; DWORD size = MAX_PATH; LPCTSTR Rgspath = "Softwa
2022-03-26 18:29:41
604
原创 一种更优雅的 recv 和 send:超大数据的传输
一种更优雅的 recv 和 send:超大数据的传输int MySocketRecv0(int sock, char* buf, int dateSize){ //循环接收 int numsRecvSoFar = 0;//目前收到的数据 int numsRemainingToRecv = dateSize;//剩余要接收的数据 printf("enter MySocketRecv0\n"); while (1){ int bytes
2022-03-24 17:38:35
1104
原创 静态成员变量和静态成员函数
静态成员变量一个类中可以有一个或多个静态成员变量,所有的对象都共享这些静态成员变量,都可以引用它。static 成员变量和普通 static 变量一样,都在内存分区中的全局数据区分配内存,到程序结束时才释放。这就意味着,static 成员变量不随对象的创建而分配内存,也不随对象的销毁而释放内存。而普通成员变量在对象创建时分配内存,在对象销毁时释放内存。静态成员变量必须初始化,而且只能在类体外进行。例如:int Student::m_total = 10;初始化时可以赋初值,也可以不赋值。如果不赋值
2022-03-20 09:22:49
1702
1
原创 this指针详解
this指针this 实际上是成员函数的一个形参,在调用成员函数时将对象的地址作为实参传递给 this。不过 this 这个形参是隐式的,它并不出现在代码中,而是在编译阶段由编译器默默地将它添加到参数列表中。this指针是类的指针,指向对象的首地址。this指针只能在成员函数中使用,在全局函数、静态成员函数中都不能用this。this指针只有在成员函数中才有定义,且存储位置会因编译器不同有不同存储位置。this指针的用处一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的
2022-03-20 08:53:58
13773
1
原创 VLC库基本函数的使用
创建实例libvlc_new()加载媒体libvlc_media_new_path()/libvlc_media_new_location()(file:///、http://、rtsp://、screen://)创建播放器libvlc_media_player_new_from_media()设置播放窗口libvlc_media_player_set_hwnd()开始播放libvlc_media_player_play()获取播放长度libvlc_media_player_get_l
2022-03-18 20:24:44
758
原创 C++引用详解
引用参数的传递本质上是一次赋值的过程,赋值就是对内存进行拷贝。所谓内存拷贝,是指将一块内存上的数据复制到另一块内存上。对于基本类型的数据,它们占用的内存往往只有几个字节,对它们进行内存拷贝非常快速。而数组、结构体、对象是一系列数据的集合,数据的数量没有限制,可能很少,也可能非常多,对它们进行频繁的内存拷贝可能会消耗很多时间,拖慢程序的执行效率。C/C++ 中禁止在函数调用时直接传递数组的内容,而是强制传递数组指针;而对于结构体和对象没有这种限制,调用函数时既可以传递指针,也可以直接传递内容;为了提高效
2022-03-16 16:08:57
833
原创 内联函数详解
CPU 会一条一条执行程序中的代码。CPU 在执行主调函数代码时如果遇到了被调函数,主调函数就会暂停,CPU 转而执行被调函数的代码;被调函数执行完毕后再返回到主调函数,然后在继续执行下 一条代码。函数调用是有时间和空间开销的。程序在执行一个函数之前需要做一些准备工作,要将实参、局部变量、返回地址以及若干寄存器都压入栈中,然后才能执行函数体中的代码;函数体中的代码执行完毕后还要清理现场,将之前压入栈中的数据都出栈,才能接着执行函数调用位置以后的代码。如果函数体代码比较多,需要较长的执行时间,那么函数调用
2022-03-15 23:18:18
889
原创 指针小总结
指针的声明格式:typeName* pointName;例:int* p;其中p是指针,而int* 是指向int的指针指针赋值应将内存地址赋值给指针,可以对变量名应用&运算符来获得被命名的内存的地址,new 运算符返回未命名的内存的地址例:int * pn;int a=8;pn=&a;int * pa;pa=new int[8];区分指针和指针所指向的值int * pt;pt是指向int的指针,则*pt不是指向int的指针,而是完全等同于一个int类型的变
2022-03-08 22:54:51
587
原创 屏幕截图和发送
屏幕截图和发送要实现远程控制,被控端的屏幕监控是要解决的问题,在这里采用了屏幕截图发送的方式来实现屏幕实时监控在此项目里把截取的图片保存为png格式,并存于内存流中在进行发送//发送屏幕截图int SendScreen() { CImage screen;//GDI //GetDC()功能作用:检索指定窗口的客户区的显示上下文环境句柄 //参数1:指定窗口句柄 //返回值:返回值表示指定窗口区域的DC句柄,失败返回NULL HDC hScreen = ::Ge
2022-03-04 15:34:58
745
原创 Windows文件操作
获取磁盘分区原理:在windows中1,2,3,4分别表示A,B,C,D盘,最多到Z盘,基本没有超过26个盘的通过使用_chdrive()函数切换磁盘分区来判断有多少给磁盘分区int MakeDriverInfo() {//1==>A 2==>B 3==>C...26==>Z, //windows下最多有26个分区 std::string result; for (int i = 1; i <= 26; i++) {//遍历磁盘 i
2022-03-03 23:00:40
363
2
原创 包 的 设 计
包的设计在本项目中,会有文件操作,信息传输,故想着设计一个包来进行解决,并且进行了封装以及构造函数重载来方便操作详情见代码//包设计类class CPacket{public: //构造函数,初始化 CPacket():sHead(0),nLength(0),sCmd(0),sSum(0){} //数据包封包构造函数,用于把数据封装成数据包 //参数一:命令 参数二:数据指针 参数三:数据大小 CPacket(WORD nCmd, const BYTE* pData, size_t n
2022-03-03 19:03:10
334
5
原创 单例类操作
单例类描述:指在整个系统生命期中,一个类最多只能有一个实例(instance)存在,使得该实例的唯一性(实例是指一个对象指针)用法:1. 将构造函数的访问属性设置为private2. 提供一个GetInstance()静态成员函数,只能供用户访问唯一一个实例3. 定义一个静态成员指针,用来供用户获取4. 重载 (=)赋值操作符以及拷贝构造函数,并设为private, 避免对象间拷贝,复制封装:.hclass CServerSocket{public: //提
2022-03-01 17:07:25
82
原创 网络编程的设计
基于TCP/IP协议的C/S模型TCP/IP特点:面向连接的、可靠的、基于字节流的传输层协议。C/S 即 客户端/服务器 模型。服务端设计打开网络库//打开网络库,返回值为int类型,打开成功返回0 WSADATA data; if (WSAStartup(MAKEWORD(1, 1), &data) != 0) { return FALSE; } return TRUE;程序结束前一定要关闭网络库:WSACleanup();创建一个socketsocket:
2022-03-01 16:46:40
2051
原创 QT天气预报
项目介绍本项目基于QT平台开发的一款天气预报的应用,效果图如下:1、 有城市的天气预报,有背景图、控件半透明化。2、 显示日期,城市名称,当天的天气预报3、 当天天气预报的详细数据4、 该天的一些生活指数:如感冒指数、每日寄语5、 当天的日出日落时间,及扇形时间占比6、 该城市,前一后四天的天气预报,含有日期,星期,天气,高低温7、 最近一周的温湿度曲线8、 搜索框、刷新按钮。9、 窗口大小固定,无最大、最小化、关闭按钮。鼠标拖动窗口移动,右键退出。10、自定义按钮图标实现思路
2022-02-26 15:39:03
4515
6
原创 VMware Workstation 安装ssh服务器
VMware Workstation 安装ssh服务器切换到root账户确认网络通畅虚拟机的默认网络配置是 NAT 模式,共享宿主机 ip安装 net-toolsudo apt install net-too未安装状态用 ifconfig 查看 ip 地ssh 服务通过 sudo ps afx|grep ssh(sudo 首次会提示输入密码)来查看是否安装了 ssh 服务未查看到 sshd 进程,未安装/etc/init.d/ssh start 因此也未能启动 sshd更新
2021-12-03 22:50:58
2821
原创 全排列和排列组合
排列组合对一组数字进行排列组合,比如1,2,3的排列组合为1231 21 32 31 2 3代码实现:#include<iostream>#include<algorithm>using namespace std;int n,tem[1000],a[1000];void tsort(int start,int length,int num,int a_len,int *a,int *tem){ int i,j; for(i=start;i<a
2021-04-30 10:46:08
334
原创 十大排序算法
算法总结*冒泡排序#include <iostream>#include <algorithm>#include <vector> using namespace std; void bubbleSort(vector<int> &q){ for(int i = q.size() - 1; i > 0; i--){ bool flag = false; for(int j = 0; j +
2021-04-26 17:24:49
74
原创 哈夫曼算法
#include<iostream>#include<string>#include<algorithm>using namespace std;#define n 6 //叶子数目#define m 2*n-1 //树中结点总数typedef struct { //结点类型 double weight; //结点的权值 int parent, lchild, rchild;//双亲指针及左右
2021-04-05 22:27:52
92
原创 素数筛(线性筛法)
一、什么是线性筛法?线性筛法是指在O(n)的复杂度情况下,筛选出所给数的所有质数二、原理是什么?1.最小质数由公理可知,n都可以被分解为多个质数的乘积,那么,在这些质数中,我们总能找到一个最小的数x,那么x就是n的最小质数2.剔除非质数既然有了最小质数x,针对每一个数,我们只需要从2开始,逐条对2-n进行遍历(假设我们此时遍历到的数是i),如果发现i%x=0,那么我们就知道这个数要被剔除掉因为它可以被至少两个数的乘积表示(不满足质数的定义)3.如何保证不重复剔除非质数?我们知道,45可以是
2021-04-05 12:48:00
6069
3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人