自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++】智能指针的模拟实现

#include<iostream>#include<mutex>using namespace std;//智能指针的模拟//内部就是一个需要管理的空间//构造函数赋值,析构函数清理//指针要实现*,返回解引用后的空间,->返回指针//auto_ptr的核心是拷贝构造,赋值运算符的管理权转移(参数一定要引用!!!因为要拿走它的资源)//赋值运算符因为不是构造,要先判断不是给自己复制,在清理空间再复制,返回*thistemplate<class T&g

2021-09-15 21:09:33 203

原创 【项目】云备份项目简介

项目简介:搭建云备份服务器客户端,实现客户端针对指定目录文件自动备份到云端,服务器端会对上传的文件热点判断,非热点压缩存储到磁盘。通过浏览器可以查看与下载(支持断点续传),ssl加密传输(httplib支持ssl)概要设计:客户端模块:Windows下的客户端程序功能需求:自动对指定目录下文件备份模块划分:目录监控模块:对指定目录下文件判断是否需要备份1.新增文件 2.被修改的文件网络通信模块:文件上传服务器数据管理模块:对备份的文件信息进行管理服务端模块:Linux服务器功能需.

2021-08-16 13:13:39 347

原创 【排序算法】八大排序总结

#include<iostream>#include<vector>using namespace std;void select_sort(vector<int>& v){ //简单选择排序时间复杂度最好最坏都是O(N^2),空间复杂度O(1),且稳定 for (size_t i = 0; i < v.size()-1; ++i){ int idx = i; for (size_t j = i + 1; j < v.size();

2021-08-15 12:18:00 289

原创 【项目】小餐馆(点餐系统)项目框架

项目简介名称:点餐系统项目描述:使用户可以通过浏览器访问服务器获取菜品信息并进行点餐;以及可以使管理员通过浏览访问服务器实现订单以及菜品管理。市场调研:整合所学知识;毕设准备;校内实训;技术调研:线程,socket,http,json,MySQL,STL概要设计:框架:MVCmodel:数据管理模块–管理数据(菜品,订单),外界想要访问数据必须通过这个模块完成,不能直接访问.view:视图界面模块–浏览器前端界面,用户或者管理员的操作都是通过前端界面完成.contralle

2021-07-31 15:44:24 1259

原创 【项目】Httplib库的简单学习和使用

Httplib学习历程httplib库是什么:源码简单分析:基于Json的一次练习:延伸:httplib库是什么:Httplib库是一个 C++11 单文件头文件跨平台 HTTP/HTTPS 库。在使用的时候仅仅添加头文件即可。在Linux和Windows平台都可以使用。我们只用使用httblib提供的函数即可完成HTTP客户端和服务端的搭建。我的库来自于github:源码简单分析:在httplib.h的主题框架中主要包含了:struct Request 请求数据类struct Respo

2021-07-31 15:40:51 3217

原创 【项目】对于Json序列化的简单学习和使用

jsoncpp基本应用认识和学习安装开发包:json工作的主要类:json::value:接收外来数据json::Reader:反序列化parse(value,reader);json::Writer类:序列化 1 #include<iostream> 2 #include<string> 3 #include<jsoncpp/json/json.h> 4 using namespace std; 5 string

2021-07-31 15:39:40 264

原创 并查集的学习和模拟实现

并查集将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这类问题的抽象数据类型称为并查集。采用了类似于森林的数据形式。特点:1.初始化为-1;2.在一组的数据选出一个代表当根节点,根节点用负数存储该集合的元素个数3.集合的其他节点存根节点的索引。4.将两个数据加入到一个结合,要先判断它们的顶级跟集合是否在一起,在一起则结束,若不在一起需要将两个根节点再次构造

2021-07-31 11:28:53 130

原创 LRU的学习和LRU的模拟实现

LRULRU是什么组织结构实现和详细注释LRU是什么LRU是Least Recently Used的缩写,意思是最近最少未使用,它是一种Cache替换算法。广义上的Cache指的是位于速度相差较大的两种硬件之间, 用于协调两者数据传输速度差异的结构。LRU在缺页中断中利用广泛,每次访问一个页,就会把页数放入一个数据结构,当数据结构满了就会淘汰掉最近最少未使用的页数,这个数据结构可以保证最新被访问的数据在最开始的位置。图片来自网络。组织结构这样一个数据结构要保持高效实现O(1)的put和get

2021-07-31 10:05:27 170

原创 TCP--IO多路转接模型

classtcp.hppE> 1 #pragma once

2021-07-17 18:07:11 212 3

原创 【网络】http自定制协议

1 #include <cstdio> ...

2021-07-14 15:56:22 317

原创 【Linux】楼下大爷都看得懂的用户权限,文件权限相关指令及其示范!!

用户权限susudo新增用户,设置密码susu用于切换用户。Linux用户分为超级用户(root)和普通用户。超级用户拥有所有权限。切换示例:su rootsu devsudo表示普通用户在进行操作时有权利提权使用指令。示例:用sudo临时提权,使得dev(普通用户)可以更改目录的所有者chown–超级用户用来来改变目录拥有者的指令。可以使用sudo权限的普通用户由root用户加入sudo组完成:加入方法:新增用户,设置密码root用户可以增加普通用户新增用户:us

2021-06-09 17:08:33 882 6

原创 【C++】细节满满地lambda表达式讲解!

lambda格式捕捉列表说明:细节及使用作为仿函数格式lambda表达式书写格式:[capture-list] (parameters) mutable -> return-type { statement }[捕捉列表] (参数列表) 取消常量性 -> 返回值类型{函数体}lambda项目细节说明捕捉列表作为lambda表达式的起始标志,可以捕捉上下文中的变量供lambda函数使用参数列表与普通函数的参数列表一致,如果不需要参数传递,则可以连同()一起省略

2021-06-04 17:23:44 952 11

原创 【数据结构】哈希表--线性探测和哈希桶及unordered_set,unordered_map代码示范

哈希桶#include<iostream>#include<vector>using namespace std;//开散列//hash表封装了一个链表指针数组,和一个size(存放的元素个数)//链表指针数组里面就是单链表的节点//单链表节点template<class V>struct HashNode{ V _val; HashNode<V>* _next; //再写一个构造函数,插入等操作需要在某位置新建节点 HashN

2021-05-28 12:52:36 347 1

原创 【网络\Linux】Linux网络编程-TCP,UDP套接字编程及代码示范

这里写目录标题UDPtcptcp和udpUDP 1 #include <cstdio> 2 #include <iostream> 3 #i

2021-05-25 15:42:42 188 1

原创 【数据结构】关联式容器map和set的模拟实现

实现mapset写一个测试红黑树模拟实现.map主要的问题就在map的[]operator重载:map的[]重载.//map的实现template<class K, class T>class Map{ struct MapKeyOfValue{ const K& operator()(const pair<K, T>& val){ return val.first; } };public: typedef typename R

2021-05-22 15:21:02 97

原创 【数据结构】关联式容器底层红黑树的模拟实现

红黑树的实现红黑树节点迭代器红黑树的插入验证红黑树是一种二叉搜索树,接近平衡。主要有几个特点:每个结点不是红色就是黑色根节点是黑色的如果一个节点是红色的,则它的两个孩子结点是黑色的对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点每个叶子结点都是黑色的红黑树节点#include<iostream>#include<utility>using namespace std;enum COLOR{ RED, BLACK}

2021-05-22 15:16:04 146

原创 【Linux】Linux新手必备常用工具小结~

linux常用工具yumvimgcc/g++yumyun是linux软件包管理工具,就类似于我们的APP应用商店,里面有我们实现一些功能的工具。操作作用yum list查看能安装的软件清单yum search keyword按名称查找软件sudo yum install name安装指定工具(超级用户或sudo权限)sudo yum remove name卸载指定工具(超级用户或sudo权限)以下展示了一个压缩软件的安装卸载:yum list:

2021-05-18 18:11:45 2373 18

原创 【数据结构】二叉树遍历(前中后,递归非递归)

这里写目录标题前序递归非递归中序遍历递归非递归后序遍历递归非递归前序递归class Solution {public: vector<int> v; vector<int> preorderTraversal(TreeNode* root) { //vector不能写在函数里,否则只会输出最后一个节点 if(root==nullptr){return v;} v.push_back(root->val);

2021-05-18 18:10:38 106 2

原创 【数据结构】AVL树insert接口实现

AVL树的插入接口需要分多种情况讨论,前提是依据插入后平衡因子的值来做调整:1.平衡因子为0,结束调整;2.平衡因子为正负1,继续向上调整,直到0;3.平衡因子为正负2,此时还需要进一步讨论:出现平衡因子±2比较复杂,需要针对每一种情况做出不同旋转:3.1. pParent的平衡因子为2,说明pParent的右子树高,设pParent的右子树的根为pSubR当pSubR的平衡因子为1时,执行左单旋当pSubR的平衡因子为-1时,执行右左双旋3.2. pParent的平衡因子为-2,说

2021-05-16 13:14:11 270

转载 【C++】static初始化

转载自此博客1.在C++中,全局static变量和class的static成员变量在main函数之前初始化,main函数之后销毁。2. 函数内部的局部static变量在该函数第一次被调用时初始化,在main函数之后销毁3.对于static数据即使是函数内部的对象则存放在全局数据区,全局数据区的数据并不会因为函数的退出就将空间释放。...

2021-05-16 10:38:59 2092

原创 【Linux/设计模式】线程池的实现

线程池任务类线程安全的结构线程池类线程池是一种非常典型的生产消费者模型。我们在利用线程处理任务的时候,线程过多会带来调度开销,有大量的时间用去创建和处理线程,进而影响缓存局部性和整体性能。所以就有了线程池,它维护着多个线程,等待着监督管理者分配可并发执行的任务。注意要将人物数据和处理方法一起传入进来,避免线程池和数据处理耦合,增大线程池开销。线程池在网络服务器访问等地方是非常适合的。整个编写的思路和注意事项都写在注释中了任务类里面需要包含数据和数据处理方式typedef void (*han

2021-05-16 10:36:27 146 1

原创 【设计模式】单例模式

#include<iostream>#include<mutex>using namespace std;class fullsingleClass {public: static int* get() {//双重锁模式 if (_data == nullptr) {//先判断是否为空,如果为空则进入,不为空说明已经存在实例,直接返回 //进入后加锁 my_mutex.lock(); if (_data == nullptr) {//再

2021-05-16 10:33:22 92

原创 【C++】map的[]operator

关联式容器由于二叉搜索树的特性,其中map有operator[],而set,multimap,multiset都不具备。我们先看官方的解释:每一次执行operator[],都在底层默认走一下的式子:operator[]经历了insert,所以它可以实现:1.(K为map已有的值)修改map中对应K的val;2.(K不存在)或者创建新的节点插入map;...

2021-05-14 16:51:49 322

原创 【LeetCode】从前序与中序遍历序列构造二叉树,从中序与后序遍历序列构造二叉树

构造二叉树从前序与中序遍历序列构造二叉树从中序与后序遍历序列构造二叉树非递归从前序与中序遍历序列构造二叉树采用递归创建:1.对于参数preorder,采用引用的方式创建,保证共用一个2.startidx和endidx直接传数字,每一层递归都有自己的值3.递归的结束条件是<而不是<=,因为start和end指向同一个元素时,这个元素还没有创建,在接下来创建他的子树才会返回4.每一层递归要创建preorder[preidx]为值的数,然后创建他们的左子树,右子树(因为前序遍历的顺序是根

2021-05-14 11:57:55 96

原创 【数据结构】<KV>模型二叉搜索树实现

KV模型二叉搜索树:#include<iostream>using namespace std;template <class K,class V>struct BNode{ K _key; V _val; typedef BNode<K, V> Node; Node* _left; Node* _right; BNode(const K& key, const V&val) :_key(key) , _val(val)

2021-05-14 10:54:05 179

原创 【C++】菱形虚拟继承

注:Windows操作系统下32位程序普通继承我们先看普通的菱形继承,数据的存储情况:class A{public: int _a;}; class B : public A//class B : virtual public A{public: int _b;}; class C : public A//class C : virtual public A{public: int _c;};class D : public B, public C{public:

2021-05-07 16:07:24 93

原创 【Linux】线程安全-条件变量(+互斥量)实现同步案例

利用互斥量+条件变量实现通过单一生产消费者模型搭配互斥锁模拟线程同步因为有个临界资源碗–需要互斥锁 1 #include <stdio.h>

2021-04-28 18:34:04 119

原创 信号量和条件变量(+互斥量)实现生产消费者练习

1 #include<cstdio> ...

2021-04-28 15:48:53 127

原创 【Linux】线程安全-互斥量(mutex)-售票系统案例

1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<unistd.h> 4 #include<pthread.h> 5 6 int tickets=100; 7 8 void* func(void* arg){ 9 //pthread_detach(pthread_self()); 10 while(1){E> 1...

2021-04-26 10:54:20 232

原创 【Linux】线程的创建和终止

1 #include <stdio.h> 2 #include <unistd.h> 3 #include <stdlib.h> 4 #include <pthread.h> 5 6 void *thr_entry(void *arg)//类型是规定的 7 { 8 printf("%s\n", (char*)arg); 9 while(1) {//去掉死循环普通线程正常退...

2021-04-22 15:20:03 83

原创 【Linux】signal演示

1 #include <stdio.h> 2 #include <unistd.h> 3 #include <stdlib.h> 4 #include <signal.h> 5 6 void sigcb(int signo) 7 { 8 printf("原信号是:%d\n", signo); 9 printf("替换成功!\n"); 10 } 11 int main () ..

2021-04-22 15:19:41 89

原创 模拟实现priority_queue

#include<iostream>#include<vector>#include<functional>using namespace std;template <class T>struct Less{//注意名字不可以小写,会和库里的重复, bool operator()(const T&left,const T& right){ return left < right; }};template <

2021-04-18 16:34:29 96

原创 【Linux】模拟信号阻塞及可靠非可靠信号演示

1 #include <stdio.h> 2 #include <unistd.h> 3 #include <stdlib.h> 4 #include <signal.h> 5 6 void sigcb(int num) 7 { 8 printf("原来的信号是::%d\n", num); 9 } 10 int main () 11 { 12 signa...

2021-04-11 15:20:33 94

原创 【C++】List的模拟实现

注意:1.List底层是链表实现的,所以要写一个链表的节点结构。2.List的迭代器是一个类,而其使用了泛型参数。3.List迭代器失效:仅会导致当前的迭代器失效,不会导致前面或者后面的失效#include<iostream>using namespace std;//List底层实现是双向带头循环链表,先一个链表节点存储数据template <class T>struct ListNode{ T _data; ListNode<T> _prev

2021-04-11 15:10:05 131

原创 【Linux】进程间通信--共享内存实现及演示

读数据: 1 #include<stdio.h> 2 #include<unistd.h> 3 #include<stdlib.h> 4 #include<sys/shm.h> 5 #define IPC_KEY 0X12345678 6 int main(){ 7 //创建共享内存 8 int shmid=shmget(IPC_KEY,4096,IPC_CREAT|0664); 9 if(shmid<0)

2021-04-10 09:36:29 268

原创 【Linux】进程间通信--命名管道的创建和演示

read进程: 1 #include<stdio.h> 2 #include<unistd.h> 3 #include<stdlib.h> 4 #include<errno.h> 5 #include<fcntl.h> 6 #include<string.h> 7 #include<sys/stat.h> 8 int main(){ 9 //创建命名管道 10 umask(0);

2021-04-10 09:36:06 180

原创 【Linux】进程通信--模拟实现管道符

1 #include <stdio.h> 2 #include <unistd.h> 3 #include <stdlib.h> 4 #include <sys/wait.h> 5 6 int main () 7 { 8 int pipefd[2]; 9 int ret = pipe(pipefd); 10 if (ret < 0) { 11 perror("pipe er..

2021-04-10 09:35:34 132

原创 【Linux】进程通信--匿名管道读写特性演示

1.若管道中没有数据,则read会阻塞: 1 #include<stdio.h> 2 #include<unistd.h> 3 #include<stdlib.h> 4 #include<string.h> 5 6 int main(){ 7 int pipefd[2]; 8 int ret=pipe(pipefd); 9 if(ret<0){ 10 pe

2021-04-10 09:35:02 126

原创 【C++】模拟实现vector及迭代器失效问题的讨论

这里写目录标题迭代器失效一、二、三、总结vector简单模拟实现vector是表示可变大小数组的序列容器。迭代器失效一、要注意vector的迭代器失效问题。下面的例子是实际编程中的问题,第一眼看上去没啥问题,但其实reserve增容,开辟新空间后,size()在底层是(_finish-_start),但new增容之后_start是新地址的开头了,此时size()就没有意义了。 //void reserve(size_t n){ // if (n > capacity()){ // T

2021-04-08 17:30:30 147

原创 【Linux】对IO操作中库函数和系统调用接口的理解

链接: link.链接: link.Q:我们知道库函数是对系统调用接口的封装,呢么对于库函数系列(fopen,fclose,fwrite,fread,fseek)和系统调用接口系列(open,close,write,read,seek)有什么区别呢?11.通过查看参数知道,他们的操作的句柄不同,f系列库函数是利用文件流指针操作文件,而系统调用接口是通过文件描述符操作文件的。22.在Linux下FILE文件中有一个int _fileno封装了文件描述符。看一段代码:我们可以用->来改变文

2021-04-06 16:09:50 190

空空如也

空空如也

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

TA关注的人

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