自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 收藏
  • 关注

原创 C++实现动态类型std::any

自己实现一个简易的C++动态类型Any

2023-04-06 09:49:51 342

原创 IO密集型与CPU密集型

本文主要介绍一下什么是IO密集型程序,什么是CPU密集型程序;以及这两种类型的程序在单核及多核情况是否适用于多线程编程。

2023-04-04 20:41:38 959

原创 编译与链接相关知识

本文主要介绍了一下编译及链接的过程

2023-04-02 22:55:06 356

原创 C++的new、operator new、placement new

C++的new、operator new、placement new

2023-04-01 23:10:23 270

原创 muduo学习笔记

申明1、笔记内容来自于哔哩哔哩上的视频大并发服务器开发、《Linux多线程服务端编程》那本书、网上的博客以及自己对muduo的理解。2、目前学习了muduo的base库和net库的大部分源码 ,还有一小部分尚未阅读,待以后在进行二次阅读。3、尚未阅读的muduo库部分源码包括http、inspect、protobuf、protorpc以及base库和net库中所带的test文件夹中的一些实例代码,还有muduo自带的examles。第一部分 《Linux多线程服务端编程》所学总结一、服务器开发的

2020-11-15 14:11:27 1732

原创 C++11学习笔记

申明:​ 这是 C++2.0(C++11 和 C++14) 新特性的笔记,来自于观看过的一些视频教程、网上博文和C++方面的书籍,可能还缺少一些知识,这里只是对现阶段本人所掌握的知识进行整理归纳,日后还会补充。笔记里的 ctor是构造函数,dctor是析构函数一、C++版本及一些学习网站1.1 C++ Standard(规格)的演化C++98 1.0版本C++03 TR1C++11 2.0版本C++14 2.0版本C++2.0新特性包

2020-10-25 20:59:10 872 5

原创 查找——3、平衡二叉树

1、AVL树(平衡二叉树)其定义为:平衡二叉树或者是空树,或者是满足下列性质的二叉树。⑴:左子树和右子树深度之差的绝对值不大于1;⑵:左子树和右子树也都是平衡二叉树。平衡因子(Balance Factor) :二叉树上结点的左子树的深度减去其右子树深度称为该结点的平衡因子。因此,平衡二叉树上每个结点的平衡因子只可能是-1、0和1,否则,只要有一个结点的平衡因子的绝对值大于1, 该二叉...

2020-02-26 10:59:06 186

原创 查找——2、二叉树排序树

1、二叉排序树(BST)的定义二叉排序树(Binary Sort Tree或Binary Search Tree) BST的定义为:二叉排序树或者是空树,或者是满足下列性质的二叉树。(1) :若左子树不为空,则左子树上所有结点的值(关键字)都小于根结点的值;(2) :若右子树不为空,则右子树上所有结点的值(关键字)都大于根结点的值;(3) :左、右子树都分别是二叉排序树。结论:若按中序...

2020-02-26 10:30:29 216

原创 查找的几个基本概念

1、查找有两种基本形式:静态查找和动态查找静态查找:在查找时只对数据元素进行查询或检索,查找表称为静态查找表。动态查找:在实施查找的同时,插入查找表中不存在的记录,或从查找表中删除已存在的某个记录,查找表称为动态查找表。根据存储结构的不同,查找方法可分为三大类:① 顺序表和链表的查找:将给定的K值与查找表中记录的关键字逐个进行比较, 找到要查找的记录;② 散列表的查找:根据给定的K值直接...

2020-02-26 09:56:59 1041

原创 查找——1、折半查找法

1、折半查找又称为二分查找,是一种效率较高的查找方法。2、折半查找的前提条件:查找表中的所有记录是按关键字有序(升序或降序) 。查找过程中,先确定待查找记录在表中的范围,然后逐步缩小范围(每次将待查记录所在区间缩小一半),直到找到或找不到记录为止。3、查找的算法可以简述为以下:用Low、High和Mid表示待查找区间的下界、上界和中间位置指针,初值为Low=1,High=n。⑴ 取中间...

2020-02-26 09:37:03 5503

原创 3、串的模式匹配算法(普通和KMP)的代码实现

#include <stdio.h>#include <stdlib.h>//串的定长顺序存储结构#define MAX_STRLEN 256typedef struct StringType{ char str[MAX_STRLEN]; int length;}StringType;//Brute-Force模式匹配算法/* 采用顺序存储方式存储主...

2020-02-21 17:58:46 299

原创 2、串的顺序存储结构的练习代码

#include <stdio.h>#include <stdlib.h>//串的定长顺序存储结构#define MAX_STRLEN 256typedef struct StringType{ char str[MAX_STRLEN]; int length;}StringType;//求字符串长度int StringLen(StringType ...

2020-02-21 17:53:41 575

原创 1、串的基本概念与存储结构

1、串的基本概念 串(字符串):是零个或多个字符组成的有限序列。记作: S=“a1a2a3…”,其中S是串名,ai(1≦i≦n)是单个,可以是字母、数字或其它字符。 串值:双引号括起来的字符序列是串值。 串长:串中所包含的字符个数称为该串的长度。 空串(空的字符串):长度为零的串称为空串,它不包含任何字符。 空格串(空白串):构成串的所有字符都是空格的串称为空白串。 注意:空串和空...

2020-02-21 17:51:13 1584

原创 树的非递归中序遍历和先序遍历

中序遍历比较重要,再次对其作出重点解释。//中序遍历void inPrint(BiTree p){ stack<BiTree> st; BiTree pr = p; int is_empty_stack = 0; do { while(pr != NULL) { st.push(p...

2020-02-20 10:59:01 149

原创 7.2、互斥量(互斥锁)的相关API

1、对于多线程的程序,访问冲突与数据紊乱的问题是很常见的,解决的一种办法是引入互斥锁(Mutex);获得锁的线程可以完成“读-修改-写”操作,然后释放锁给其他线程,没有锁的线程只能等待而不能访问共享数据互斥锁的主要函数1、pthread_mutex_init函数初始化一个互斥锁(互斥量) ---> 初值可看作1int pthread_mutex_init(pthread_mutex...

2020-02-02 21:25:26 395

原创 7.1、同步的概念与线程同步

1、同步概念 所谓同步,即同时起步,协调一致。不同的对象,对“同步”的理解方式略有不同。例如: 1、设备同步,是指在两个设备之间规定一个共同的时间参考; 2、数据库同步,是指让两个或多个数据库内容保持一致,或者按需要部分保持一致; 3、文件同步,是指让两个或多个文件夹里的文件保持一致。 4、编程中、通信中所说的同步与生活中大家印象中的同步概念略有差异。主旨在协同步调,按预定的先...

2020-02-02 21:00:10 368

原创 6.3、线程API使用例子

1、循环创建多个子线程#include <stdio.h>#include <pthread.h>#include <stdlib.h>#include <string.h>void *thrd_func(void *arg){ int i = (int)arg; sleep(i); printf("In thr...

2020-02-01 20:54:41 126

原创 6.2、线程控制的相关函数

1、pthread_create函数创建一个新线程。作用,对应进程中fork() 函数。int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);返回值:成功:0;失败:错误号 -----Linux环境下,所有线程特点,失败均直接返...

2020-02-01 20:39:05 229

原创 6.1、线程概念及与进程之间的关系

1、什么是线程 LWP:轻量级的进程,本质仍是进程(在Linux环境下)。 线程是进程中的一个实体,是CPU调度和分配的最小单位。 进程:独立地址空间,拥有PCB 线程:也有PCB,但没有独立的地址空间(共享) 区别:在于是否共享地址空间。 独居(进程);合租(线程)。 Linux下: 线程:最小的执行单位 进程:最小分配资源单位,可看成是只有一个线程的进程。2、Li...

2020-02-01 20:23:37 192 1

原创 5、子进程回收(wait和waitpid)

一个进程在终止时会关闭所有文件描述符,释放在用户空间分配的内存,但它的PCB还保留着,内核在其中保存了一些信息:如果是正常终止则保存着退出状态,如果是异常终止则保存着导致该进程终止的信号是哪个。这个进程的父进程可以调用wait或waitpid获取这些信息,然后彻底清除掉这个进程。我们知道一个进程的退出状态可以在Shell中用特殊变量$?查看,因为Shell是它的父进程,当它终止时Shell调用wa...

2020-01-28 15:48:07 476

原创 4、回收子进程(僵尸进程和孤儿进程)

1、孤儿进程 孤儿进程: 父进程先于子进程结束,则子进程成为孤儿进程,子进程的父进程成为init进程,称为init进程领养孤儿进程。2、僵尸进程 僵尸进程: 进程终止,父进程尚未回收,子进程残留资源(PCB)存放于内核中,变成僵尸(Zombie)进程。3、特别注意 僵尸进程是不能使用kill命令清除掉的。因为kill命令只是用来终止进程的,而僵尸进程已经终止。4、产生孤儿进程的例...

2020-01-28 15:01:50 201

原创 3、exec函数组

1、exec函数组的介绍:fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种 exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换, 从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。将当前进程的.text、.data替换为所要加载的程序的.text...

2020-01-28 12:32:20 147

原创 2、进程管理

1、进程控制块PCB我们知道,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。/usr/src/linux-headers-3.16.0-30/include/linux/sched.h文件中可以查看struct task_struct 结构体定义。其内部成员有很多,我们重点掌握以下部分即可:* 进程id。系统中每个...

2020-01-28 12:26:16 84

原创 1、使用Linux的系统接口进行文件的读写

1、所用的主要函数接口open函数#include <sys/types.h>#include <fcntl.h>#include <sys/stat.h>int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);...

2020-01-28 12:08:03 391

原创 4、Git管理远程仓库

4.1、使用远程仓库的目的 作用:备份,实现代码共享集中化管理4.2、Git克隆 目的:将远程仓库(github对应的项目)复制到本地 命令:git clone 仓库地址 仓库地址由来:由远程github上面的拷贝地址复制过来4.3、将本地仓库同步到git远程仓库中 命令:git push 解决 无法同步问题或者没有权限: (The requested...

2020-01-26 15:11:57 71

原创 3、Git初始化及本地仓库创建和使用

3.1、基本信息设置 1、设置用户名: git config --global user.name 'nfh1024' 2、设置用户名邮箱: git config --global user.email '1024222310@qq.com' 3、注意:该设置在github仓库主页显示谁提交了该文件3.2、初始化一个新的Git仓库 1、创建文件夹:mk...

2020-01-26 15:10:25 127

原创 2、Git的安装和使用

1、Git安装和使用目的:通过git管理github托管项目代码下载安装: 1、Git官网:https://www.git-scm.com/download/win 2、双击安装 3、选择安装目录 4、选择组件 5、开始菜单目录设置 6、选择使用命令行环境 7、以下三步傻瓜式 8、检验是否安装成功2、Git基本工作流程 2.1、Git的工作区域: 1...

2020-01-26 15:08:19 119

原创 QT的Json使用,封装包及解析包,哈希加密算法(主使用Md5)

1、Qt的Json的介绍#include <QJsonDocument> //json文件#include <QJsonObject> //json对象#include <QJsonArray> //QJsonObject数组1>、Qt中Json的组装结构/* QJsonDocument //整个双...

2020-01-23 15:47:52 989 1

原创 C语言操作Mysql数据库API

1、功能: 获得或初始化一个MYSQL结构所需头文件: #include <mysql/mysql.h>函数原型: MYSQL *mysql_init(MYSQL *mysql)函数返回值: 一个被始化的MYSQL*句柄备注: 在内存不足的情况下,返回NULL2、函数功能: 连接一个MySQL服务器1>所需头文件: #include <mysql/mys...

2020-01-18 22:20:17 234

原创 QT读写文本文件和文件信息的获取

1、读文件void RWfile::on_pb_r_clicked(){ QString path = QFileDialog::getOpenFileName(this, "open", "../", "TEXT(*.txt)"); if(path.isEmpty() == false) { QFile file(path); if(f...

2020-01-17 11:56:01 847 1

原创 QT字符串转化网络编程时用到

/*-----------------------------------------------------------------------------------------------------------------------*/ | //QString -> C++的string -> char * | | QStri...

2020-01-17 10:51:30 91

原创 QT网络通信数据流转图片

服务器发送ID和图片void MsgSocket::slotImage(const QString &id, const QImage &image){ QString l_id = id; m_msgType = MsgType_Image; QByteArray byteBuffer; QDataStream out(&byteBu...

2020-01-17 10:51:09 553

原创 QT事件处理

1、QKeyEvent(键盘事件)void MyKey::keyPressEvent(QKeyEvent *event){ if(event->key() == Qt::Key_A) //event->key返回键盘按下去键的ASCII码值。QT::Key_A是个宏,可通过帮助文档查看相关的宏 { qDebug() << "It is...

2020-01-17 10:45:13 91

原创 QT设置窗口边框消失和窗口透明,并移动窗口

1、设置窗口边框消失和窗口透明构造函数中写 //去窗口边框 setWindowFlags(Qt::FramelessWindowHint | windowFlags()); //窗口背景设置为透明 setAttribute(Qt::WA_TranslucentBackground);2、设置窗口移动//按下void Shape::mousePressEvent(...

2020-01-17 10:32:37 998

原创 QPixmap与QImage之间的相互转换

void QPixImage::paintEvent(QPaintEvent *event){ QPainter p(this); QPixmap pixmap; pixmap.load("F:/LH/Shoe/SalesClient/image/ghead/h5.png"); //QPixmap -> QImage QImage im = pix...

2020-01-17 09:51:33 699

原创 C++STL中的less和greater

greater() 和less()函数经常使用在sort()中用来对容器进行升序或者降序排序,或者用在push_heap()和pop_heap()中用来构建最小堆(greater)或者最大堆(less).二者包含在头文件functional中//包含在头文件<functional>中 // TEMPLATE STRUCT greater emplate<class...

2019-12-21 21:34:43 988

原创 银行家算法及实现代码

1).银行家算法中的数据结构(1).可利用资源向量Available(2).最大需求矩阵Max(3).分配矩阵Allocation(4).需求矩阵Need2).银行家算法Request请求向量,(1).如果Request[i] <= Need[i][j]转下步,否则它所需要的资源数已超过它所需要的最大值(2).如果Request[i] <= Available[i][j...

2019-12-02 00:15:42 2924

原创 杨辉三角及代码实现

杨辉三角:杨辉三角是一个不能少于三行的数字群,杨辉三角的每个数字都等于它正上面和左上角数字之和。如图:5层杨辉三角11 11 2 11 3 3 11 4 6 4 1代码实现(C语言):#include <stdio.h>int main(){ int n, i, j, arr[10][10] = {0}; scanf("%d", &n);...

2019-11-26 00:16:27 589

原创 list处理文件内容合并并去重,排序输出

问题:两个文本文件包含某中学的高考成绩,其中包含学生的准考证号、姓名、大学和总成绩。但两文件内内容有重复,现要求把两文本文件内容合并,去掉重复记录,并按准考证号升序排列输出。#include <iostream>#include <list>#include <string>#include <fstream>#include <fu...

2019-11-17 18:05:22 418

原创 vector的综合案例(书籍作者 问题)

#include <iostream>#include <string>#include <vector>#include <algorithm>#include <functional>#include <iterator>using namespace std;class Book{public: ...

2019-11-17 12:12:58 148

空空如也

空空如也

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

TA关注的人

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