自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 使用c++实现简易线程池

线程池其实就是一堆处理任务的线程和 一个任务队列 ,处理线程不断地从这个任务队列中拿出任务进行处理。如果元素个数不为0,获取一个任务,将这个任务移除队列,线程处理任务。判断当队列中元素个数为0的时候使用wait方法,阻塞线程。不过需要注意的是 对于这个任务队列需要保证线程安全。向任务队列中添加任务 ,添加完成之后唤醒一个线程。线程安全的任务队列使用信号量和互斥锁来实现。1,一个向任务队列中添加任务的接口。2,一个从任务队列中取出任务的接口。3,一个处理任务的方法;3.从队列中取出任务。

2023-10-22 15:18:30 214

原创 生产者消费者模式(c++实现)

c++实现生产者消费者模式

2023-10-22 11:12:15 1223

原创 加油 程序员

加油阳子 工作顺利

2021-10-24 23:57:43 215 2

原创 快速排序 C++实现

快速排序有多种实现方法:下面我就介绍一下hoare法1.hoare法就是定义必须先找到一个基准值,一般我们会选择第一个元素为基准值。再定义两个指针begin,end,一个指向第一个位置,一个指向第二个位置。然后先从后向前找第一个小于基准值5的元素,即上图中的3然后再从前往后找第一个大于基准值5的元素,即上图中的8然后将他们两个进行交换就得到了如下的排列方式这时候继续上面的步骤先从后向前找小于基准值的元素,但是前提是begin必须<end;当begin与end相遇时就将基准值与be

2021-08-24 20:00:08 302

原创 IO多路复用:select, poll , epoll

IO多路转接模型( IO复用 ):就是针对描述符进行IO就绪监控,防止系统对IO未就绪的时间进行操作,避免因为IO未就绪导致的阻塞,提高了效率。通常应用于TCP服务器端,针对大量套接字描述符进行监控,让程序能仅针对就绪的描述符进行操作,进而提高处理效率。而udp服务端大多针对单个套接字进行操作,大多数情况也会用到多路转接模型,因为多路转接不但可以进行IO就绪时间监控,而且还可以进行超时控制。IO多路转接模型分为 :select poll epollselect:监控原

2021-08-21 17:57:36 247

原创 HTTPS协议

HTTPS协议:并不是一个新的协议,而是在HTTP协议基础上进行了一层加密https协议就是基于ssl进行加密实现加密传输https 加密流程,ssl 加密流程 目的:实现数据的安全传输 安全传输:需要考虑两个问题 1.身份验证问题:防止伪装 2.数据加密问题:防止监听 身份验证实现: CA认证:通信双方在通信前先到权威机构请求给自己办法一个CA证书 CA证书(权威机构信息

2021-08-17 14:28:51 201

原创 实现二叉搜素树的删除

二叉搜索树的删除1.思路是:先找到删除节点的位置。然后判断是否找到了这个元素。如果找到了。就删除节点。而删除节点又分为四种情况1.删除节点没有子节点如上图我们假如要删除 9 直接删除该节点即可..2.删除节点没有右子树如上图,假如我们要删除1,那麽我们就不能直接删除该节点 ,因为他还有子节点,如果我们直接让1的父节点的左孩子直接置为null,就会丢失1的子节点。所以应该将1的节点连接在节点3下面。3.删除节点没有左子树如上图,假如我们要删除1,那麽我们就不能直接删除该节点

2021-07-28 16:29:42 168

原创 带你梳理c++多态知识

多态:顾名思义就是相同的事情经过不同的对象来做得到不同的结果例如买票问题,成人买票时点击购买就会出现全票价格而学生买票就会出现的是半价价格相同的买票行为,不同的对象来做,产生了不同的结果,这种行为就是多态行为。实现多态必须满足的条件:1.前提:继承2.虚函数3.调用虚函数的类型必须是指针或者引用4.虚函数需要被重写5.一般都是父类的指针或引用调用虚函数虚函数重写:1.函数名,参数列表,返回值和父类虚函数完全相同2.协变:返回值可以不是同一个类型,但是必须是由继承关系的指针或者引用

2021-07-28 09:48:17 121

原创 append函数的用法

append()函数类似于尾插就是给元素后面追加一个字符串string str ;string str2 =“123”;1.str.append(str2);就是给str后面追加一个str2即输出为123str.strappend(str2,1,1);就是给后面追加上str2中从第二个元素开始连续一个元素1232str.append(“abc”);就是给str后面追加上abc1232abcstr.append(“123456”,6);就是给str后面加上字符串

2021-03-24 17:08:20 45099 3

原创 STL迭代器

iterator 迭代器迭代器是一种抽象的设计概念,在设计模式中iterator模式被定义为:提供一种方法,可以按序访问某一聚合物(容器)所含元素,且不暴露该聚合物的内部表达方式。在STL中,迭代器又起着将容器与算法联合到一起的作用。迭代器:设计模式–》元素访问的一种设计模式所有容器都需要遵循相同的设计规范所有容器迭代器的是使用方法都是相同的怎末使用迭代器?迭代器的指针方式和指针类似设计规范:1.begin迭代器:指向第一个元素的位置2.end迭代器:指向最后一个元素的后一个位置正

2021-03-24 16:19:17 206 1

原创 resize函数的作用

resize函数作用:修改有效字符个数resize(n)如果有效字符的个数增加,则新增的位置填充‘\0’resize(n,ch)如果有效的字符的个数增加,则新增的位置填充ch如果size减小,如下图。

2021-03-24 16:17:45 1691 1

原创 三分钟明白如何实现链表尾删

三分钟明白如何实现链表尾删什么是链表链表实现尾删什么是链表下面是我对链表概念的一些总结。链接: link.链表实现尾删我们都知道链表都是每个节点依靠一个指针来指向下一个节点的。因为链表不支持随机访问 所以要实现尾删我们就需要找到该链表最后一个节点的前一个节点,然后将这个节点的*next指针指向由最后一个节点改变为null。你以为这样就完了吗 ?????答案是 当然没有完,因为我们还有很重要的一步没有做那就是释放我们要删除的那个结点的空间。如果不是放会产生很严重的后果,会造成内存泄露。如下图

2021-03-21 16:16:12 2028 1

原创 三分钟带你明白如何实现链表尾插

三分钟明白如何实现链表尾删什么是链表什么是链表下面是我对链表概念的一些总结。链接: link.

2021-03-21 15:57:06 195

原创 什么是链表

什么是链表?链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链链表是线性排列的称为节点的元素的集合。接次序实现的 。每个节点在列表中都包含一个数据字段和一个指向下一个节点的指针,称为next 。 链接列表的第一个和最后一个节点通常称为列表的头和尾。 头指针指向第一个节点,最后一个节点指向空值。 请注意,头部不是单独的节点,而是对第一个节点的引用。 当列表为空时,头指针指向空。链表总共有八种分为:单向 双向 带头 不带头 循环 非循环虽然有八种链表但是实际中

2021-03-21 15:01:31 466 4

原创 利用malloc函数动态创建一个数组,并且数组大小由用户输入,并且输出这个数组

利用malloc函数动态创建一个数组,并且数组大小由用户输入,并且输出这个数组#include<stdio.h>#include<stdlib.h>int main() { int n = 0; scanf_s("%d", &n); int* ptr = (int*)malloc(sizeof(int)*n); for (int i = 0; i < n; i++) { scanf_s("%d", &ptr[i]);//为数组中的每个元素赋值

2021-03-13 15:23:45 1928 1

原创 malloc 函数,realloc函数,calloc函数

malloc,relloc,calloc的区别malloc函数malloc函数作用malloc返回值relloc函数realloc函数作用calloc函数calloc函数作用malloc函数void *maloc( size_t size );malloc函数作用malloc函数作用是动态开辟一个空间,分配指定字节数的存储区,此存储区中的初始值不确定malloc返回值如果有无效的内存可用,malalorers一个空的Poter到指定的空间,crNULL(如果有不确定的内存可用的话)。若要将插槽返

2021-03-13 15:15:26 481 1

原创 结构体内存对齐

结构体内存对齐1.为什么要实现内存对齐2.结构体怎末对齐3. 举例说明4.如何让结构体按照指定的对齐参数进行对齐5.如何知道结构体中某个成员相对于结构体起始位置的偏移量1.为什么要实现内存对齐因为在内存中我们一般读取数据不是一个一个内存来读取,一般都是分为一个个内存块来读取。例如:a占一个字节 ,b占四个字节因为在内存中我们一般读取数据不是一个一个内存来读取,一般都是分为一个个内存块来读取。如果我们要读取b这个数据就需要像下面这样将b分为两段然后再进行剪切拼接,将b的前三个字节和第二段的b的第四

2021-03-09 14:32:16 3005 15

原创 引用和指针的不同点

引用和指针的不同点1.引用在初始化是引用一个实体后,就不能引用其他的实体,而指针可以在任何时候指向一个同类型的实体。2.引用在定义时必须初始化,而指针不需要。3.在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数。4.没有null引用,但是有null指针。5.引用自加即引用的实体增加一,指针自加,即指针向后偏移一个类型的大小6.引用比指针更加安全。7.访问实体方式不同,指针需要显式解引用,而引用是编译器自己处理。8.指针有多级指针,但是引用没有多级引用。

2021-03-08 18:29:16 2170 1

原创 什么是大小端?如何测试某台机器是大端还是小端。

大小端是指数据在内存中的保存方式。顾名思义 大小端 就是大端和小端。大端模式:所谓的大端模式,是指数据的高字节,保存在内存的低地址中,数据的低字节,保存在内存的高地址中。低地址存在高位,高地址存在低位。例子:0000430: e684 6c4e 0100 1800 53ef 0100 0100 0000大端模式下,前32位应该读为:e6 84 6c 4e例如 int a=0x12345678大端模式下存储为12 34 56 78int a =10;小端模式所谓的小端

2021-03-07 21:12:50 738

原创 求回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。如果我们要求一个数字是否为回文数的话首先想到的就是将数字本身反转,然后将反转后的数字与原始数字进行比较,如果它们是相同的,那么这个数字就是回文。其后半部分反转后应该与原始数字的前半部分相同。可以分为两步进行1.先排除肯定不为回文数的条件即 当x<0时或者当x最后一位为0并且x不为0时可知这个整数x肯

2021-03-04 17:22:18 1393 3

原创 移除元素 —原地移除数组中所有的元素val,要求时间复杂度为O(N),空间复杂度为O(1)

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。题目来源:力扣(LeetCode)如下图 如果我们必须仅使用o(1)额外空间的话我们可以用覆盖的方式将数据为2的用后面不为2的数据覆盖可以创建两个变量i和idx构建循环,每次循环,i和idx都向后移动一位,如果第i个数据与val相同时idx不移

2021-02-24 14:15:12 281

原创 数据结构 在顺序表中任意部位删除数据

在任意位置删除数据如下图 ,假如我们要删除任意一个位置pos的数据,我们就应该把原本放在这个位置以及它后面的数据全部向前移动。假如我们要删除第二个位置的数据,(pos=2),我们就应该吧原本放在这个位置后面的数据都向前移动,即c原本在第三个位置,现在我们应把它移动到第二个位置也就是原本c的位置,d移动到c的位置,这样就完成了数据移动。1.检查容量2.平移数据int end4 = pos+1;while (end4<=s1->_size) {s1->_data[end4-1 ]

2021-02-23 18:29:30 448

原创 数据结构 在顺序表中任意部位插入数据

在任意位置插入数据如下图,假如我们要将一个数据val插入任意一个位置pos,我们就应该把原本放在这个位置以及它后面的数据全都往后移动。假如我们要将数据val插入第三个(pos=3),我们就应该把原本放在第三个的数字及他后面的数字都向后移动,然后再将val反正该第三个位置而原本的3以及它后面的数据将依次移动到第四个位置第五个位置第六个位置以此类推知道所有的数据都移动完成后。再进行插入1.检查容量2.平移数据int end2 = s1->_size - pos + 1;while (end2)

2021-02-23 16:52:49 3005 6

原创 数据结构 在顺序表中头插及尾插的实现

头插头插和尾插不同尾插只需要在顺序表最后插入一个数据容量不够扩容即可,而头插需要移动元素 ,所以我们必须明白是应该从后往前还是从前往后移动元素。//头插 从后向前移动(防止数据被覆盖)void seqlistpushhand(seqlist* s1, sldatatype val){ if (s1 == NULL) return; //检查容量 seqlistcheckcapacity(s1); //移动元素 int end = s1->_size; while (end &g

2021-02-23 14:47:46 1505

原创 调用函数在调用完后该函数变量内存会释放

再调用函数后调用的函数变量会释放如下代码:#include<stdio.h>int fun() { int i = 0; return i += 10;}int main() { int a = fun(); printf("a=%d\n", a); int b = fun(); printf("a=%d\n", b); return 0; }我们可以明显地看出我们用两个变量a和b来接受这个函数的返回值后,两个都为10;这是因为每次我们调用函数后这个i的内存

2021-02-17 23:31:52 3089

原创 转义字符

转义 转移含义如果我们要打印出一个文件所在位置路径的话那肯定会出现类似于C:\aaa\bbb\ccc这样的一串字符如果我们想要把它打印出来的话,直接如下图显而易见的是结果跟我们想要的输出是不同的,这就是因为在上面的代码中 printf(“c:\aaa\bbb\ccc\n”);其中\aaa 中的第一个‘a’和前面的’'结合成了一个字符,所以输出后只能输出两个‘a’,那为什莫显示只显示了一个呢,这是因为第一个‘b’和它前面的‘\’结合成了另一个转义字符,而这个转义字符的含义是退格 所以就会退格占用

2021-02-17 21:10:22 168

原创 strlen与sizeof的区别和字符串中的”\0“。

C语言中会经常用到sizeof函数和strlen函数。那么这两个函数有甚麽区别呢?sizeof()sizeof 函数可以帮助我们求得字符串所占的空间的大小例如strlen()sstrlen 函数可以帮助我们求得字符串长度的大小例如从上面两个例子我们可以看出sizeof()和strlen()两个函数的区别之所以两个函数结果会不同的原因是sizeof()计算时会将字符串后面的’\0’也计算进去。另外如果一个字符串用”hello“的方式来表示的话 ,这个字符串后面会自动加上一个“\0”。而如

2021-02-15 15:27:19 2975

原创 对自己计算机编程能力学习的一些计划和想法

我的第一篇博客我是一个来自西安工业大学软件工程的学生的学生,之所以选择之一专业,是因为小的时候喜欢看电影,看到电影中那些计算机高手,只需要一台微型计算机就可以决定一场”战争“的胜负,还有警察也可以依靠这个手段更加方便地追踪罪犯,我就对这个”神秘“的专业打心底里的佩服,心里想象那天自己也可以成为这些技术大牛一样的人。所以在我高考完就直接选择了计算机软件工程这一个专业,为了自己的目标去努力。现在我选择了这一个专业进行学习,顺应自己的兴趣去学习计算机编程知识,也准备将这一钟爱的行业当成自己以后安家立命的本事。

2021-02-15 14:34:01 225 4

空空如也

空空如也

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

TA关注的人

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