自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++函数、类模板与类型转换

模板,类型转换

2022-08-23 20:41:55 734 1

原创 3种工厂模式详解

工厂模式

2022-07-19 20:36:43 988

原创 23种设计模式简介

23种设计模式简介

2022-07-19 14:14:48 321

原创 观察者模式C++

观察者模式

2022-07-18 20:32:08 165

原创 状态模式 C++

状态模式

2022-07-18 19:17:13 78

原创 Linux总结(2)

Linux总结

2022-06-19 20:25:56 207

原创 对象池(C++)

对象池

2022-06-17 23:49:26 406

原创 对象与对象之间关系(C++)

对象之间的关系

2022-06-17 21:51:33 453

原创 Linux总结(1)

linux总结

2022-06-17 17:08:20 147

原创 io复用(Linux)

select,poll,epoll

2022-06-13 11:45:44 133

原创 网络通信(多线程续篇-套节字)(Linux)

网络:多个设备连接起来互联网:多个网络连接起来网络设备:路由器、交换机等······IP地址:唯一标识一台主机(PIV4(32位)、IPV6(64位))网络号+主机号组成,唯一寻址标记MAC地址:表示计算机(48位)不可修改端口号:软件层次的应用程序编号TCP服务器--客户端TCP协议特点:面向链接,可靠的,流式服务(链接建立:三次握手,链接断开:四次挥手)...

2022-06-03 13:16:34 150

原创 进程、线程总结(Linux)

进程:一个正在运行的程序;线程:进程中的一条执行路径。

2022-06-02 12:24:12 2426

原创 多进程(Linux)

一、管道文件1、有名管道2、无名管道二、信号量三、共享内存四、消息队列五、多线程通信(1)、线程并发(2)、线程同步:1、信号量2、互斥锁3、条件变量(提供一种线程间通知的机制)4、读写锁5、fork六、套接字文件

2022-06-01 14:51:18 841

原创 拷贝构造函数及运算符重载(C++)

目录一、关键字介绍二、深拷贝与浅拷贝三、运算符重载一、关键字介绍operator运算符重载符号friend 友元函数mutable易变关键字:从按复制捕获的形参中移除const限定volatile类型限定符:二、深拷贝与浅拷贝关于如何理解深拷贝与浅拷贝呢?这么说吧。所谓浅拷贝就是仅仅拷贝了值,而没有拷贝地址空间例如s2拷贝了s1,s1=str;那么在析构的时候,我们知道析构的顺序与构造恰好是相反的,所以在析构s2的时候,会将str释放掉,因为此时s

2022-05-25 23:56:43 427

原创 BF算法与KMP算法(数据结构)

目录一、知识点二、BF算法三、KMP算法一、知识点这里的子串和真子串与之前数学里的集合与子集合一样真子串个数求法:1+2+……+n 或(n*(n+1))/2二、BF算法优点:逻辑简单,实现简单缺点:时间复杂度高O(n主串长度*m子串长度),效率低#include<iostream>using namespace std;#include<assert.h>#include<string.h>/...

2022-05-25 16:27:28 1057

原创 bash命令续篇(LINUX)

一、模拟clear(这里主要用的是printf里的移动光标功能实现)(可以百度>_<)测试用例这个好像没办法测试,哈哈,不好意思了二、模拟ls测试用例三、模拟pwd测试用例四、将这些命令与之前的bash拼接一下,实现执行自己自定义的命令测试用例:(注意这里暂时只能使用系统内置类型的命令“cd,exit”和自定义的类型(目前只定义了ls,clear,pwd)需要执行其他的就需要大家去添加路径啦)...

2022-05-24 23:09:03 95

原创 bash命令实现(Linux)

实现一些Linux上的基础命令,如ls,exit,ps在开始之前,有一个新的内置类型给讲解一下char buff[]={};char arr[]={};假设里面的内容是stc ghb sgj sjkchar* s=strtok(buff," ");int i=0;while(s!=NULL){ arr[i++]=s; strtok(NULL," ");}那么第一次执行这个语句会将stc后面的空格替换为\0并以第一个遇到的\0为标记。截取前面的内容并赋值给s。(st

2022-05-24 17:05:33 196

原创 MVC模型(C++)

MVC模型是(model模型 view视图 controller控制器)是一种软件设计的框架模式,它采用model-view-controller的方法把业务逻辑,数据与视图显示分离,把众多的业务逻辑集合在一个部件里。当然这样并不能让我们理解它,简单的说,就是一种把数据模型,视图显示与人机交互三者分离开的一种编程方式。为什么要引入MVC模型呢?(1)可以使同一个程序使用不同的表现形式,如果控制器反馈给模型的数据发生了变化,那么模型将及时通知有关的视图,视图会对应的刷新自己所展现的内容.

2022-05-21 00:31:29 2970

原创 拷贝构造函数(C++)

一、对象赋值语句这个比较简单,就直接上代码啦#include<iostream>using namespace std;class Myclass{private: int a,b;public: void set(int i,int j){ a=i; b=j; } void show(){ cout<<a<<" "<<b<<endl; }

2022-05-20 23:35:52 287

原创 静态数据成员(C++)

目录一、静态数据成员1.1、定义1.2、声明1.3、初始化1.4、普通访问1.5、对象访问二、静态成员函数一、静态数据成员1.1、定义我们都知道,类是对具有相同属性和相同行为的一组对象的描述。有时侯,我们希望每定义一个对象,调用一次构造函数,其中有一些数据成员被所有对象共享,但是我们知道,类中的数据成员是每个对象所私有的,那么我们该如何使用一个数据让所有对象共享它呢?一个办法是将其定义为全局变量,这样就可以达到让多个数据对象共享的目的,但是全局变量的引入会

2022-05-20 15:54:52 6233

原创 信号(Linux)

目录一、改变信号响应方式二、发送信号一、改变信号响应方式 默认SIG_DFL 发送信号 进程 自定义信号 void fun(int sig) ...

2022-05-19 12:06:34 135

原创 快速排序(算法与数据结构)

目录一、定义二、实现2.1递归方式实现2.2非递归方式实现三、优化3.1 调用其他排序方式3.2改变首元素(基准值)3.3随机种子法一、定义首先,我们来介绍一下快速排序,每一趟排序,将第一个值看作基准值,然后从右向左找一个比基准值小的值放在左边,然后再从左向右找一个比基准值大的值放在右边,直到left 与right相遇,(此时会发现,以基准值位分界线,将所有数据分为两个部分,左边部分的值都小于基准值,右边部分的值都大于基准值)二、实现2.1递归方.

2022-05-19 01:23:41 666

原创 直接插入排序与基数排序(算法与数据结构)

目录一、直接插入排序二、基数排序(桶排序)一、直接插入排序直接插入排序的基本思想是每次从待排序列中找到最小值,与第一个值进行交换时间复杂度O(n^2)空间复杂度O(1)稳定性:稳定所以我们根据这个思想那么代码就很容易实现了:void Select_Sort(int *arr,int len) { for (int i = 0; i < len-1;i++) { for (int j = i+1 ; j < len;j++) { if (arr

2022-05-19 00:08:46 156

原创 循环队列(C语言)

循环队列里需要注意的是每次头指针和尾指针的位置,因为是循环队列,所以每次入队,头指针和尾指针都会+1,但是每次出队,只有尾指针-1,当头指针与尾指针相遇的时候,表示这个队列已经是空的了,我们可以利用这个来判空。头文件函数声明#define MAX_SIZE 100typedef int ELEM_TYPE;typedef struct Queue { ELEM_TYPE* base;//接受malloc 申请的空间 int front;//表头指针 int rear;//表尾指针 //

2022-05-18 00:05:38 2550

原创 链队实现(C语言)

我们之前已经了解过栈了,我们知道,栈是先进后出,后进先出那么队则是先进先出,后进后出就像我们去排队买饭一样,排在前面的人就先买到,天经地义对吧>-<那么我们知道了队的原理,链队实现起来就相对容易多了。在这里我们要注意:我们这里的头节点不能和之前的头节点一样了,因为我们这是链式队列,需要的操作是先进先出,后进后出,即尾插头删,所以这里我们的头节点要有两个指针域,分别指向待插入位置和待删除位置。我们先在头文件中进行函数声明typedef int ELEM_TYPE;typ

2022-05-17 23:56:48 267

原创 链栈实现(C语言)

所谓链栈,就是用链的方式来实现栈,我们之前对链和栈都有过学习,所以实现起来相对简单为什么要用链来实现栈呢?我们知道链的尾插和尾删都很容易实现,所以我们可以用链来实现栈栈:先进后出,后进先出链:有头节点(相对简单)每次入栈就是在链后面进行插入,出栈就是删除最后一个节点头文件的设计typedef int ELEM_TYPE;typedef struct Lstack { ELEM_TYPE data; struct Lstack* next;}Lstack,*PLstack;.

2022-05-17 23:44:37 654

原创 栈实现(C语言)

在编写栈之前,我们首先需要了解栈到底是声明?所谓栈,我们遵循先进后出,后进先出什么意思呢?例如 我们入栈1,5,6,8,9那么出栈时先出9,其次是8,6,5,1我们还需要了解,栈是顺序结构首先,我们先在头文件中写函数声明typedef int ELEM_TYPE;#define STACK_INIT_SIZE 10//栈的初始容量10typedef struct stack { ELEM_TYPE* base;//栈底指针,用来接受malloc申请的空间 int to.

2022-05-17 23:33:17 378

原创 获取时间(C++)

我们在编写代码的过程中,可能会经常用到时间函数,提前收藏一下,有备无患>_<详细介绍,函数定义如下:参数:timer 存取结果的时间指针变量,类型为time_t,指针变量可以为null。如果timer指针非null,则time()函数返回值变量与timer指针一样,都指向同一个内存地址;否则如果timer指针为null,则time()函数返回一个time_t变量时间。返回值,如果成功,获取当前系统日历时间,否则返回 -1。结构体struct tm中的属性在结构体.

2022-05-17 23:23:47 4544 1

原创 动态内存申请(Linux)

我们在C语言中学习过关于动态内存申请的相关操作,例如malloc那么在Linux中也是相同的操作:我们以32位操作相同为例我们知道,申请动态内存实质上就是从堆区(.heap)中申请,而在4G内存分布中,系统内核已经占去了1G的空间,而剩下的3个G还需要被这些区域共享,所以实际上我们从堆区申请的最大内存可能就是2.5G左右,但是 如果我们的虚拟机开启了虚拟内存的话,实际上可申请的就会比2.5G大了,例如我们虚拟机的虚拟内存是2G,此时,我们最大可从堆区申请的空间就是约4.5个G左右了char

2022-05-17 00:58:44 860

原创 C++派生类与继承初识(访问属性)

class基类中的访问属性成员 共有成员 私有成员 保护成员 类的成员函数 可访问 可访问 可访问 类外,类的对象 可访问 不可访问 不可访问 派生类的声明 class 派生类名:继承方式 基类名{ 派生类新增的数据成员和成员函数 };class complex{};//基类class complexa:public complex{};//共有继承class complexa:private complex{};//私有继承

2022-05-16 00:39:01 135

原创 C++入门(基础篇)

1、函数模板C++允许用同一个函数名定义多个函数,这些函数的参数个数和参数类型不同,例int Max(int a,int b){ return a>b?a:b;}long Max(long a,long b){ return a>b?a:b;}double Max(double a,double b){ return a>b?a:b;}虽然这些函数体都是相同的,但是由于参数类型不同,所以是不同的函数,但在C++上可以将这些函数重载,使他们只.

2022-05-16 00:01:14 121

原创 类(C++)

我们在C语言阶段学习过struct,这里类与其相似class complex{public: int a; int b;private: complex(){} ~complex(){} void fun(){ print();//ok cout<<a<<endl; cout<<b<<endl; } void print() const {

2022-05-15 23:56:28 165

原创 string类(C++)

C++支持两种类型的字符串,第一种是C语言介绍过的以结束符“\0”(即以NULLL结尾)的字符数组,标准库函数提供了一组对其进行操作的函数(拷贝strncpy,链接strcat,比较strcmp,字符长度strlen)等,而在C++中也保留了这种方法,并且提供了一种更方便的方法#include<string>string 对象1,对象2······例如string str1,str2;string str3("china");//定义并初始化string str4=".

2022-05-15 23:04:39 97

原创 希尔排序(最小增量排序)

是对直接插入排序的一种优化最小增量数组 由大到小,且为素数,最后一个增量必须为1;原始数据: 1,56,6,33,7,12,45,32,14,42按增量5组进行排序 1,56,6,33,7,12,45,32,14,42即(1,12),(56,45),(6,32),(33,14),(7,42)排序(1,12),(45,56),(6,32),(14,33),(7,42)得到1,45,6,14,7,12,56,32,33,42按增量2组进行排序1,45,6,14,7,12,56,32.

2022-05-14 14:16:50 545

原创 八大排序之堆排序(算法与数据结构)

在写堆排序之前,有几个注意的点要提前说明一下大顶堆:父节点的值大于孩子节点小顶堆:父节点的值小于孩子节点二叉树:根据这张图:这就是一个简单的二叉树,其中100是父节点,88是左孩子节点,66是右孩子节点叶子节点:处于最底层的数据,由他们不能再出现新的分叉,便称之为叶子节点根节点:是最顶部的根,也就是最顶部(数组第一个元素)初始时,我们先将数组臆想为二叉树第二步:第三步:了解了大概的思路,就可以开始进行编写代码啦当然在开始写代码之前,还有一个小小的工作没..

2022-05-14 12:45:56 73

原创 进程fork

printf缓冲区(打印会满足以下三个条件之一)1.缓冲区放满会直接打在屏幕上2.缓冲区未满,用户强制刷新3.程序结束fflush(stdout); 直接刷新输出缓冲区主函数参数int main(int argc,char* argv[],char* envp){}// 参数个数 参数内容 环境变量当执行某个命令时,如./mian命令,./main本质上是一个可执行程序,bush复制自己本身,将复制出来的子bush替换成main程序,然后运行mai

2022-05-12 17:18:29 785 1

原创 八大排序(直接插入排序)

直接插入排序(intersect)稳定性:检查排序之后是否存在跳跃插入定义:每次从待排序列中取出一个值,放到已排序列之中,放入后序列依然有序优点:逻辑简单,便于实现。空间复杂度小(当数据量小的时候,时间复杂度也不大)例 :默认第一个数据已经有序,第一次拿第二个数据和第一个数据比较(红色是已排序好的)待排序列 1,8,5,4,6,2,7第一次排序 1,8,5,4,6,2,7第二次排序1,5,8,4,6,2,7第三次排序1,4,5,8,6,2,7第四次排序1,4,5,6,..

2022-05-11 15:03:04 202 1

原创 单链表(算法与数据结构)

特点:逻辑相邻,物理不一定相邻具体实现之前有几点需要注意适用于带前驱的操作,比如插入,删除等for(struct Node *p=pn;p->next!=NULL;p=p->next);//从头节点开始遍历适用于不带前驱的操作,如打印,查找,获取有效值个数等for(struct Node *p=pn->next;p!=NULL;p=p->next);//从第一个有效节点开始遍历插入 1.准备新节点 2.找合适的插入位置 3.插入删除 1.判空 2.申...

2022-05-11 13:34:50 119

原创 顺序表(算法与数据结构)

1.顺序表顺序表的特点是逻辑连序,物理连序即开辟一块连续的内存空间,相当于数组arr在定义的时候,定义一个length记录下标所以在尾插和尾删的时候,下标就是length,可以直接进行插入和删除(时间复杂度O(1))但是 但是 但是 在其他位置插入和删除的时候,需要挪动数据(时间复杂度O(n))在查找的时候时间复杂度也是O(n)因为需要将顺序表遍历到需要查找的位置2.链表特点:逻辑连续,物理不一定连续2.1单链表...

2022-05-11 13:15:20 526 1

原创 二分查找(递归函数)

用递归的思想的来解决这个问题首先我们需要知道什么是递归:递归的特点:1、自己调用自己 2、问题规模不断缩小或扩大 3、有退出条件int binarysearch(int len,int *arr,int val,int left,int right) { assert(arr != NULL); if(left>right) return -1; int index = (left ...

2022-05-10 22:03:56 480 1

空空如也

空空如也

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

TA关注的人

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