
C++
文章平均质量分 91
记录学习,交流学习~
皮皮蜥
每天都在加油中哦!
展开
-
视频点播项目
允许用户通过浏览器访问视频网站,浏览多个线上视频,并允许点开一个视频进行观看。同时,也可以对视频进行增删改查。本项目可用于课设以及个人编程技术锻炼。原创 2024-07-20 14:39:14 · 977 阅读 · 0 评论 -
boost搜索引擎
boost库是为C++语言标准库提供扩展的一些C++程序库的总称,由Boost社区组织开发、维护。Boost库可以与C++标准库完美共同工作,并且为其提供扩展功能。boost网站提供了大量的文档,实现一个搜索引擎可以帮助我们在大量的文档中准确快速找到自己所需求的文档。原创 2024-06-09 13:43:56 · 1578 阅读 · 0 评论 -
一篇文章学会高级IO
IO是数据在传输时的一种动作描述,分为输入数据(I)和输出数据(O)两种动作。和一般而言,IO都需要维护一个收发数据的缓冲区,例如read、recv函数和write、send函数,它们的数据缓冲区都是由系统帮助创建的。对于C语言中常用到的scanf函数和printf函数,同样不需要用户自己去维护缓冲区(scanf的接收缓冲区由C语言库维护)。但是,也正是程序员无法过度干涉缓冲区的原因,IO的细节并不会直接暴露程序员,默认的一套IO机制在某些场景下可能并不合适。原创 2023-05-13 16:12:56 · 1666 阅读 · 3 评论 -
网络通信之应用层协议--Linux
简而言之,应用层协议是一种数据转换成字符串的转换方式,使得程序员可以按需传送相当复杂的数据结构。并且,协议可以由程序员自己规定,只要有人认同并使用该程序员的协议,那么就可以实现正常的网络通信了。经过网络发展的几十年,一些比较成熟的协议被几乎所有的程序员所认同,例如著名的http和https,都已经写好并投入使用好多年,作为网络协议的初始学习对象是再合适不过的,但在学习http与https相关协议之前,我们不妨试着自己写一个简单的协议,具体感受一下协议的定制过程,加深对协议的了解。原创 2023-03-27 21:45:33 · 721 阅读 · 1 评论 -
进程间通信--共享内存篇
共享内存字面理解就是进程间共同享有的存储空间,不同于管道通信,共享内存就像是进程自己的空间一样,不像管道文件还得使用文件描述符去访问文件,通过文件交流信息。共享内存则是实时信息交流,几乎不存在信息的中间转换。那么共享内存在哪里呢?就真的是在每个进程中都保留一份么?也不是,开辟的共享内存在整个内存空间中独一份,但是可以通过页表映射到不同的进程中去,让各个进程都能够看到这份资源,实现通信原创 2022-12-15 19:53:17 · 1995 阅读 · 0 评论 -
图的关键路径(含多支交叉路径分离输出)
图的关键路径一般是在求从一个顶点到另一个顶点的最长路径,这个是建立在图的拓扑序列(传送门)之上进行的。所谓的关键路径,就是同时从一个顶点出发,无论其他路径走的怎么样,最后都得等待关键路径走完,才能到达最后的顶点。也就整个图的所有顶点访问完所需要的时间只由关键路径决定,这也是它为什么叫关键路径的原因。原创 2022-12-02 16:11:32 · 3577 阅读 · 0 评论 -
图的拓扑排序(入门篇)
首先要说明一点:拓扑排序是针对图这种数据结构的特有排序。百度百科对拓扑排序的定义不是特别好懂,学过离散数学才知道偏序和全序的概念,这里我就给个通俗一点的理解:访问图的顶点时,保证每次访问的顶点前面没有别的顶点(入度为0),即访问的顶点只作为弧的弧头。原创 2022-11-29 21:56:59 · 940 阅读 · 2 评论 -
图与图的深度优先遍历、广度优先遍历
图是一种较线性表和树更为复杂的数据结构,在线性表中,数据元素之间有着明显的线性关系,每个数据都有一个直接前驱和直接后继。而在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素(即孩子节点)相关,但此元素只能和上一层中一个元素(即它的双亲结点)相关。在图型结构中,节点之间的关系可以是任意的!图中任意的两个数据元素之间都可能相关。我个人认为,上述三种数据结构的学习难度排序为:线性表 < 树 < 图原创 2022-11-26 15:47:14 · 1965 阅读 · 0 评论 -
并查集解析
并查集是基于数组操作的一个特殊数据结构,和以前学习[数组的堆排序]时有点相似,只不过这次的并查集用的是双亲描述法。我们知道数组的堆排序就是为了提高排序的效率,那么并查集是为了干什么呢?这里我先不讲并查集具体的数据结构,先引入一些日常的例子来说明并查集到底是干什么的。就以老师给学生分组为例来理解。原创 2022-11-24 22:03:29 · 851 阅读 · 3 评论 -
特殊类--C++
类模板作为C++面向对象的工具,我们每个程序员可是熟悉到不能再熟悉了。就一般而言,我们在使用类模板的时候,一般诉求都是类的功能越全面越好,方便我们尽可能的去实现多种功能的组合拼装。但是,在某些情况下,类的一些功能需要被舍弃或‘变异’从而达到想要的效果。这就要求我们从最基本的类上经过改装实现特殊类。🚩有哪些特殊类特殊类种类繁多,面对不同的应用场景,不同的特殊类应运而生:不能拷贝的类、只能在堆上创建的类、只能在栈上创建的类、不能被继承的类、只能实例化一个对象的类...原创 2022-10-10 23:14:21 · 617 阅读 · 0 评论 -
智能指针--C++
指针我们都不陌生,我们在存放或指向一个地址空间时都需用到指针。而今天我们要谈的智能指针主要将问题集中到了空间(内存)的安全使用的方面。我们在堆上申请空间后,被告知一定要进行空间的释放,否则会造成内存泄漏的问题。长期的内存泄漏会造成进程卡死的情况,这要是在一款投入使用的软件上发生了,那造成的损失就不是个人可以承担的了(亲,可以拍拍屁股走人了哈🤔)。原创 2022-10-08 22:08:30 · 864 阅读 · 0 评论 -
左值引用与右值引用--C++11
左值与右值引用的使用不是特别广泛,因此某些细节我可能考虑不到,有问题的小伙伴在评论区留言哦👋。原创 2022-10-06 19:03:11 · 1207 阅读 · 0 评论 -
哈希(hash)--C++
哈希思想在处理海量数据极具优越性,往后我会进一步探索哈希的应用。今天咱就只讲一些基础的知识,为以后的拓展做个铺垫。👋。原创 2022-10-04 23:14:41 · 1537 阅读 · 0 评论 -
Stl中map、set 容器(数据结构:AVL树、红黑树)--C++
Stl的容器中,map和set都是用的树状数据结构----二叉树!但实际上用的并不是普普通通的树状结构,而是一种设计好的,规律性极强的树状数据结构:红黑树(二叉树的一种,细节下面讲)对于map和set来讲,中序遍历依旧是有序的,而这和之前讲的二叉搜索树有点相似。原创 2022-09-24 17:38:07 · 2376 阅读 · 0 评论 -
二叉搜索树(Binary Search Tree)--C++
二叉搜索树又叫二叉排序树,是二叉树的一种特殊情况。树的每个节点的值都满足一定的规律,同样是以结构体为节点创造树。1.对于根节点有“左小右大”。2.对于左右子树节点有“左小右大”。呼~,总算是把二叉搜索树的主要内容讲完了,重点还在于二叉搜索树的操作那一部分,对于删除的情况分析以及递归的实现都能使我们更加了解二叉搜索树的整体结构。关于树形数据结构的知识现阶段我还在学习中,往后会继续更新相关知识的博客。👋httpshttpshttpshttpshttpshttpshttpshttps。...原创 2022-07-29 16:45:43 · 641 阅读 · 0 评论 -
多态详解--C++
多态的讲解涉及到了继承的知识,可以说是继承是实现多态的基础。https“多态”,顾名思义就是多种形态。C++的学习始终是面向对象的,对于不同的类产生不同的对象,做同一件事可能会产生不同的结果,造成不同的形态,这就是多态的通俗理解。virtual修饰的类成员函数称为虚函数。包含纯虚函数的类叫做抽象类(也叫接口类)。纯虚函数在虚函数的后面写上=0,则这个函数为纯虚函数。多态的重点在于虚函数相关知识的掌握,搞清楚虚函数表的作用和意义对于学习多态至关重要。httpshttpshttps。...原创 2022-07-25 00:52:58 · 1389 阅读 · 2 评论 -
继承详解--C++
继承在C++的学习中是对前面类的学习的补充和拓展,总而言之,这篇文章我们还是围绕类去学习。一个类B要想继承一个类A,具体要怎么操作呢?classA{};classBpublicA//B继承A{};这里A类被称为基类(父类),B类称为派生类(子类),而中间的public则是继承方式。格式派生类继承方式基类C++支持的多继承会出现菱形继承的现象,使整个继承过程变得相对麻烦了一点,且理解困难。因此在使用继承的时候,能不用多继承就不用。类的复用除了继承之外,还有组合。https。...原创 2022-07-22 14:14:59 · 1490 阅读 · 3 评论 -
Stl中list容器解析--C++
list容器与前面的vector容器很大的区别在与list是以链表为基本结构进行数据的存储的即空间不连续存储。因此list容器的学习重点在于迭代器的理解和掌握。原创 2022-07-16 14:35:39 · 893 阅读 · 0 评论 -
Stl中vector解析&简单模拟
vector也是Stl中比较重要的一种容器,相比较于string,vector所存储的数据类型更多,不再仅仅局限于char类型的数据。 考虑到内容要精简一点,我们挑选其中比较有代表性的功能函数来讲解。 上面我们提到vector可以存放多种数据,因此我们在模拟实现的时候优先考虑模板类,成员变量直接用模板类型。vector函数模拟迭代器模拟begin()返回值:数据的起始位置这里直接考虑返回指针变量_startend()返回值:数据末尾的下一位置这里直接考虑返回指针变量_finish原创 2022-07-14 13:39:45 · 638 阅读 · 0 评论 -
简单模拟实现string--C++
string是我们在学习C++的过程中不可避免要遇到的一个类,string主要处理字符串,围绕着字符串有着这样和那样的功能。实际上string有很多的功能函数,但是有些函数实用价值并不算太高,因此我们在模拟的时候会重点关注一些使用率较高的函数。首先,string是可以用来存放字符串的,因此会有 char* _str 指针变量。为了实现对字符串的一系列增删查改,我们需要动态开辟空间来存储字符串,因此也就涉及到了_str指针变量所指向空间的大小_capacity和字符串的长度_size。string类的成原创 2022-07-07 17:31:33 · 1342 阅读 · 0 评论 -
初识模板详解--C++
目录前言函数模板定义格式实例函数模板的原理函数模板的实例化隐式实例化显式实例化模板参数的匹配原则类模板定义格式实例 类模板的实例化模板的分离编译定义模板声明与定义分离链接错误解析解决方案总结 我们以前在写代码的时候会遇到功能相似,代码内容基本一样的函数,唯一的不同点可能算是参数和返回值的不同。最简单的例子就是不同类型数据的求和(Add)等数学函数。学习C语言的时候我们遇到这种情况无非是把函数名改一改,参数改一改,多写几个函数,顶多再整一个函数指针数组来方便使用。这种做法显得非常笨,但显然这是语言限制了我们。原创 2022-06-08 22:48:16 · 350 阅读 · 0 评论 -
C&C++ 动态内存管理详解
在C语言中,动态内存的管理主要靠四个函数来实现,这四个函数分别是malloc、calloc、realloc、free。他们分别有不同的功能,但总体上都是在内存的堆上进行内存操作。结构:参数是开辟空间的大小,单位是字节(bite),如果开辟成功,则返回开辟空间的首地址,类型是void*,开辟失败就返回空指针NULL。结构:calloc函数和malloc函数的功能相近,但是calloc函数会把开辟的空间给赋值成0,其参数分别是开辟空间中元素的个数(num)和每个元素所占空间的大小(size),单位是字节(bit原创 2022-06-08 00:27:43 · 149 阅读 · 0 评论 -
友元和内部类--C++
有些时候我们在写类时,不想要第一个指针是this指针,甚至不需要this指针,但是又不得不用到类的成员变量,这就比较苦恼了。比较麻烦一点的办法就是在类内部写一些函数来返回成员变量的值,成员一多就显得麻烦。为了更好的解决这个问题,C++引入了友元函数的概念。友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声 明,声明时需要加friend关键字。日期类流输出问题:上面的代码有点怪怪的,明明是cout......原创 2022-06-06 21:51:10 · 115 阅读 · 0 评论 -
构造函数--初始化列表
目录前言:初始化列表的意义:初始化列表的构造:特殊类成员的处理:初始化顺序:我们在C++中引入初始化列表的原因何在?对于这个问题,我们先回头想想类在实例化的时候,一定会用到构造函数,那么实例化的过程中类成员变量的定义肯定是在构造函数里面了。问题在于是不是在构造函数内部初始化的时候定义呢?接下来我们就探讨一下。构造函数体中的语句只能将其称作为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内可以多次赋值。最为重要的是,一些特殊的类成员,必须放在初始化列表位置进行初始化:1.引用成员变量2.co原创 2022-06-01 00:50:08 · 1743 阅读 · 0 评论 -
类与对象(中)--C++
目录类的默认成员函数六种成员函数:1.构造函数2.析构函数3.拷贝构造函数4.运算符重载5.默认 拷贝函数与赋值运算符重载函数6.const成员函数类的默认成员函数我们在定义类的时候,类里面其实默认生成六个函数,在涉及到使用它们的情况下就会默认调用这些函数。(即使是空类也会有默认成员函数)六种成员函数:构造函数、析构函数、拷贝构造函数、运算符重载、默认拷贝构造与赋值运算符重载、const成员函数我们以日期类来进行以下函数的说明1.构造函数我原创 2022-05-19 18:44:41 · 227 阅读 · 0 评论 -
类和对象(上)--C++
目录前言:类的定义:类的访问限定符及封装:限定符:封装:类的作用域:类的实例化:类对象的大小:this指针:this指针的特点:总结:前言:就普遍而言,c语言在解决问题时讲究的是过程,而C++更关注问题中的对象。就好比 “完成作业” 这个事件吧,c语言会关注 “写作业”,“上交给学委”,“学委整理作业”,“老师批改作业”,“分发作业”这样的过程。但是C++会关注“学生”,“学委”,“老师” 这样类似的对象。而类呢,就相当于c语言中的结构体,原创 2022-05-12 23:53:06 · 235 阅读 · 0 评论 -
引用和内联函数--C++
引用:在c语言的学习过程中,我们已经接触到了指针这个概念。利用指针,我们可以很轻松的对指针所指向的内容进行改动。这里的指针也是需要变量来储存的。而在c++中,有一种操作“引用”也可以实现类似的功能,但是不需要开辟新的空间来储存。定义:引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它 引用的变量共用同一块内存空间。结构:类型& 引用变量名(对象名) = 引用实体例如:#include<iostream>int m原创 2022-05-11 18:46:08 · 285 阅读 · 0 评论