- 博客(36)
- 收藏
- 关注
原创 c++特殊类设计
比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,这种方式简化了在复杂环境下的配置管理。后来春秋战国时期,七国之间经常打仗,就发现打仗也是有套路的,后来孙子就总结出了《孙子兵法》。如果单例对象构造十分耗时或者占用很多资源,比如加载插件啊, 初始化网络连接啊,读取文件啊等等,而有可能该对象程序运行时不会用到,那么也要在程序一开始就进行初始化,就会导致程序启动时非常的缓慢。多个单例实例启动顺序自由控制。
2023-02-20 04:08:16
358
1
原创 c++智能指针
什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。// 1.内存申请了忘记释放 int * p1 =(int *) malloc(sizeof(int));
2023-02-20 03:56:45
414
原创 c++11重点语法介绍
C++11中线程类当创建一个线程对象后,并且给线程关联线程函数,该线程就被启动,与主线程一起运行。线程函数一般情况下可按照以下三种方式提供:函数指针lambda表达式函数对象public :} };// 线程函数为函数指针 thread t1(ThreadFunc , 10);// 线程函数为lambda表达式 thread t2([ ] {});// 线程函数为函数对象 TF tf;"
2023-02-18 23:21:48
950
原创 linux多线程
在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行,本质是在进程地址空间内运行在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流通过下图详细描述线程常规OS的做法(比如windows)linuxOS的做法。
2023-02-18 07:11:05
1210
原创 c++异常
实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。// 服务器开发中通常使用的异常继承体系 class Exception {public :int _id;} };
2023-02-15 18:39:21
82
原创 linux进程间通信
进程是具有独立性的,我们想要通信 — 通信的成本一定不低。你需要先让不同的进程看到同一份资源通信数据传输:一个进程需要将它的数据发送给另一个进程。资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。管道是Unix中最古老的进程间通信的形式。
2023-02-13 12:37:38
173
原创 c++ unordered_set/unordered_map的底层理解及其实现,位图实现及其应用,布隆过滤器的实现及其应用,哈希切分的应用
unordered_map在线文档说明unordered_map是存储键值对的关联式容器,其允许通过keys快速的索引到与其对应的value。在unordered_map中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。在内部,unordered_map没有对按照任何特定的顺序排序, 为了能在常数范围内找到key所对应的value,unordered_map将相同哈希值的键值对放在相同的桶中。
2023-02-04 18:34:49
1147
原创 C++STL map和set的底层理解及其模拟实现【保姆式教学】
set文档介绍map的文档简介// 该节点的左孩子 AVLTreeNode < T > * _pRight;// 该节点的右孩子 AVLTreeNode < T > * _pParent;// 该节点的双亲 T _data;int _bf;// 该节点的平衡因子 };// 节点的颜色 enum Color {// 红黑树节点的定义 template < class ValueType > struct RBTreeNode {
2023-02-04 18:25:20
2569
原创 c++多态【万字分析,全网最细,最容易懂,看不懂算我输】
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件必须通过基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。在虚函数的后面写上 =0 ,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生类才能实例化出对象。
2023-02-02 12:50:37
171
原创 c++继承【全网最详细讲解】
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。
2023-02-02 12:45:19
670
原创 c++ stl之stack和queue的底层原理及其模拟实现
适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口.deque(双端队列):是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端进行插入和删除操作,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与list比较,空间利用率比较高。deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个动态的二维数组。
2023-01-10 17:27:02
559
原创 c++stl 之list的底层理解及其模拟实现
前面说过,此处大家可将迭代器暂时理解成类似于指针,迭代器失效即迭代器所指向的节点的无效,即该节点被删除了。因为list的底层结构为带头结点的双向循环链表,因此在list中进行插入时是不会导致list的迭代器失效的,只有在删除时才会失效,并且失效的只是指向被删除节点的迭代器,其他迭代器不会受到影响。此处,大家可暂时将迭代器理解成一个指针,该指针指向list中的某个节点。
2023-01-09 20:59:56
505
原创 linux基础IO【万字详解,看不懂算我输】
openman openpathname: 要打开或创建的目标文件flags: 打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成flags。参数:O_RDONLY: 只读打开O_WRONLY: 只写打开O_RDWR : 读,写打开这三个常量,必须指定一个且只能指定一个O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限O_APPEND: 追加写返回值:成功:新打开的文件描述符。
2022-12-09 10:03:37
632
原创 linux进程控制【万字解析,全网最细!!!】
在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程.进程调用fork,当控制转移到内核中的fork代码后,内核做:当一个进程调用fork之后,就有两个二进制代码相同的进程。而且它们都运行到相同的地方。但每个进程都将可以开始它们自己的旅程,看如下程序。这里看到了三行输出,一行before,两行after。进程43676先打印before消息,然后它有打印after。另一个after消息有43677打印的。注意到进程43677没有打印before,
2022-12-03 10:25:38
1196
原创 c++stl之 vector的底层理解及其模拟实现
示例代码// a copy of third // 下面涉及迭代器初始化的部分,我们学习完迭代器再来看这部分 // the iterator constructor can also be used to construct from arrays: int myints [ ] = {it!return 0;}
2022-11-26 18:55:12
640
原创 string类【万字详解,包括认识,介绍,使用,模拟实现】
find + npos(重点): 从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置。empty (重点): 检测字符串释放为空串,是返回true,否则返回false。rfind :从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置。resize (重点) :将有效字符的个数该成n个,多出的空间用字符c填充。operator+= (重点): 在字符串后追加字符串str。size(重点): 返回字符串有效字符长度。c_str(重点) :返回C格式字符串。
2022-11-20 19:11:09
251
原创 linux权限的概念
目录的可执行权限是表示你可否在目录下执行命令。如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
2022-10-21 21:36:47
128
原创 Linux下的基本指令【最全,最详细,保姆式讲解】
tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容.head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾。说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,
2022-10-01 19:52:05
141
原创 常见排序的概念及其实现
排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。内部排序:数据元素全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。
2022-09-12 20:42:57
122
原创 c++模板
template < class T1 , class T2 , . . . , class Tn > class 类模板名 {// 类内成员定义 };// 动态顺序表 // 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具 template < class T > class Vector {public :} // 使用析构函数演示:在类中声明,在类外定义。};
2022-09-03 19:46:00
116
原创 c++内存管理
public :};// 申请单个Test类型的空间 Test * p1 =(Test *) malloc(sizeof(Test));free(p1);// 申请10个Test类型的空间 Test * p2 =(Test *) malloc(sizoef(Test) * 10);free(p2);// 申请单个Test类型的对象 Test * p1 = new Test;// 申请10个Test类型的对象 Test * p2 = new Test [ 10 ];}
2022-09-02 21:19:29
91
原创 c++类和对象万字详解,保姆级教学
operator>>同理。声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;将const修饰的类成员函数称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend关键字。构造函数是特殊的成员函数,需要注意的是,构造函数的虽然名称叫构造,但是需要注意的是构造函数的主。
2022-09-02 19:51:02
270
原创 从零开始认识c++
/c++库为了防止命名冲突, //把自己的库都定义在一个叫std的命名空间中 //namespace - 命名空间,域 using std :: cout;//展开了一部分,展开常用的 using std :: endl;cin >> a;cin >> p;return 0;}注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。
2022-08-23 22:16:52
542
原创 二叉树概念及其简单实现
双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对。比特科技叶节点或终端节点:度为0的节点称为叶节点;孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;子孙:以某节点为根的子树中任一节点都称为该节点的子孙。兄弟节点:具有相同父节点的节点互称为兄弟节点;节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;节点的度:一个节点含有的子树的个数称为该节点的度;
2022-08-19 20:52:47
186
原创 栈和队列的概念及其实现
FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头。称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。...
2022-08-07 19:43:13
53
原创 时间复杂度&&空间复杂度&&顺序表&&链表&&顺序表和链表的区别以及优缺点对比
顺序表(逻辑结构和物理结构是一致的)- 本质是数组,动态增长,并且要求里面存储的数据必须从左往右是连续的。实际中我们计算时间复杂度时,我们其实并不一定要计算精确的执行次数,而只需要大概执行次数,那么这。空间复杂度 - 空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。链表(逻辑结构和物理结构是不一致的)- 空间按需所取,头部空间不需要挪动数据。时间复杂度 - 算法中的基本操作的执行次数,为算法的时间复杂度。总结:这两个数据结构是相辅相成的。里我们使用大O的渐进表示法。...
2022-08-03 21:12:10
1137
原创 程序环境和预处理
_FILE__//进行编译的源文件__LINE__//文件当前的行号__DATE__//文件被编译的日期__TIME__//文件被编译的时间__STDC__//如果编译器遵循ANSIC,其值为1,否则未定义这些预定义符号都是语言内置的。#defineMAX1000#defineregregister//为register这个关键字,创建一个简短的名字#definedo_foreverfor(;;1000registerfor(;;)break;...
2022-07-23 19:33:37
65
原创 手把手教你如何操作文件
包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。
2022-07-19 20:23:14
307
原创 动态内存深度刨析和柔性数组详解
这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。如果开辟成功,则返回一个指向开辟好空间的指针。如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。返回值的类型是void*,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。如果参数size为0,malloc的行为是标准是未定义的,取决于编译器。free函数用来释放动态开辟的内存。如果参数ptr指向的空间不是动态开辟的,那free函数的行为是未定义的。...
2022-07-17 21:12:45
419
原创 自定义类型详解(结构体,枚举,联合)
有了结构体类型,那如何定义变量,其实很简单。intx;inty;}p1;//声明类型的同时定义变量p1structPointp2;//定义结构体变量p2//初始化定义变量的同时赋初值。x,y};structStu//类型声明{//名字intage;//年龄};//初始化structNode{intdata;}n1={10,{//结构体嵌套初始化structNoden2={20,{//结构体嵌套初始化。...
2022-07-14 20:58:11
83
原创 字符串函数及内存操作函数
size_t strlen ( const char * str );该函数有两种实现方法2.strcpy函数strcpy函数的使用char* strcpy(char * destination, const char * source );3.strcat函数strcat函数的使用char * strcat ( char * destination, const char * source );4.strcmp函数strcmp函数的使用int strcmp ( const c
2022-07-10 18:43:06
87
原创 浅谈数据在内存中的存储
数据在内存中的存储1. 数据类型的介绍1.1 整形在内存中的存储1.2 大小端介绍2.浮点型在内存中的存储2.1如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入1. 数据类型的介绍大家都知道基本数据类型有以下几种:char 字符数据类
2022-05-25 19:23:06
143
原创 第一次入驻优快云的自我介绍
我是一名来自四川轻化工大学的普通大学生,就读于信息与计算科学专业,是一个励志要进大厂的人,我来这里是想要认识更多的大佬一起学习进步,努力学好c,c++,mysql等语言,甚至精通c++。1.我的目标有很多,首先是精通c++语言,学好c++过后在学习python,java等语言,拿到各大厂的offer。2.我会通过翻阅优秀书籍(剑指offer,程序员的自我修养等)和找一些好的视频,还有学会自己调试代码,但最重要的还是自己多多的练习,训练你自己的思维能力。3.目前我会每天花费至少三个小时的时间学习。
2022-05-24 17:23:25
386
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人