自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 内存布局(C/C++)

内存布局,简单易懂

2023-02-23 20:34:56 199 1

原创 单例模式(懒汉&饿汉)

单例模式是一种创建型的设计模式,使用单例模式进行设计的类在程序中只有一个实例,并且在程序的任何地方都可以调用到,这个类称为单例类。饿汉模式是指在类加载的时候就创建对象,直接将对象实例化完毕,资源申请完毕,在使用的时候可以直接使用。懒汉模式是指在使用的时候才创建单例对象,即资源用到的时候在去申请。缺点:第一次访问对象时候速度较慢,而且存在线程安全问题。优点:效率高,资源使用的时候可以直接使用。优点:程序初始化速度快,资源占用少。单例模式又分为懒汉模式和饿汉模式。缺点:程序初始化满,资源占用多。

2023-02-19 16:51:52 201

原创 c++多态

多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。

2023-02-19 13:44:02 189

原创 套接字编程

套接字编程就是网络通信程序的编写,现在网络中的各种通信都是客户与服务器之间的通信,用户与用户之间的通信,本质上就是用户与服务器之间通信,然后服务器再与另一个用户进行通信,从而实现用户和用户之间的通信,要实现这些,都需要依靠socket,以下将介绍如何进行套接字编程。

2023-02-18 13:58:13 1575

原创 C++ 友元

当我们在实现例如重载operator

2022-12-16 23:38:04 107

原创 C++ static关键字

概念:声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量(在类的成员变量前加static关键字)

2022-12-15 15:21:20 101

原创 C++ 模板

函数模板代表了一个函数的家族,函数模板与类型无关,它可以用来创建一个通用的函数,支持不同的形参,避免函数重载的函数重复编写,它在使用时被实例化(参数化),根据实参类型产生具体的类型版本。(2)对于非模板函数和同名的函数模板,如果其他条件都相同,在调用时会优先调用非模板函数,而不会从该模板生成一个实例。(1)一个非模板函数可以和一个同名的函数模板同时存在,而且该函数模板还可以被实例化为这个非模板函数。模板通过参数实例化可以构建具体的函数或类,称为函数模板的类模板。3.类模板和函数模板的区别。

2022-12-14 18:55:36 125

原创 C++ 运算符重载

C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类 型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。函数名字为:关键字operator后面接需要重载的运算符符号。函数原型:返回值类型operator操作符(参数列表)那么为什么要有运算符重载?答:对于我们平常所见的运算符(+,-,>,

2022-12-08 22:40:14 257

原创 C++ this指针

在C++中,this是一个关键字,同时,它也是一个指针,C++编译器给每个非静态的成员函数(无static关键字修饰的函数)增加了一个隐藏的指针参数(this),让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量”的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

2022-11-20 15:27:25 1009

原创 进程间的通信

进程间通信 管道:匿名管道,命名管道;共享内存;优先级队列,信号量

2022-11-18 23:01:06 255

原创 引用和指针概念及区别

指针:指针是一个特殊的变量,它里面存储的的数值为内存里的一个地址,通过*访问内存地址所指向的值引用:引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。

2022-11-09 15:21:33 6998 2

原创 Linux基础 IO操作

通过上面的一些系统调用接口,我们知道文件描述符是一个非负整数,我们知道在Linux下,一切皆可以看成文件,Linux中规定每一个文件对应一个索引(相当于数组的下标)在对这些文件进行操作的时候,就通过索引就可以直接找到文件进行操作,而文件描述符就是内核为了高效管理这些已经打开的文件而创建的索引。在程序刚刚启动的时候,会默认打开3个文件描述符,分别是标准输入0,标准输出1,标准错误2,也就是说在此之后,新创建的文件,它的文件描述符为3,继续创建文件,文件描述符为4,以此类推。而重定向符号>>是直接将数据写入。

2022-11-05 23:33:10 752

原创 常见排序代码讲解

任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。

2022-11-04 10:49:32 178

原创 Linux进程等待和替换

在一个程序中,如果父进程创建子进程后,子进程先于父进程退出,父进程如果什么都不做,就会产生僵尸进程的问题,对于这种情况,父进程此时就需要等待子进程退出,回收子进程资源,接收子进程的退出返回值,避免产生僵尸进程。在进程退出的时候,我们通常会用exit()函数,exit(a)函数中的参数a就为status的退出状态,但是此数不能过大,因为status 的退出状态只接受一个字节(8位),超出的数位就会被截断。它既可以阻塞等待也可以非阻塞等待,同时,它既可以等待任意一个子进程退出,也可以等待指定的一个子进程退出。

2022-10-26 16:09:05 585 1

原创 二叉树基础操作

层序遍历相对于前三种遍历,需要用队列进行辅助操作,具体操作:定义一个队列,首先将二叉树的第一个结点入队,while循环判断该队列是否为空,不为空的话,则先进行出队,然后判断该树的左又子树是否为空,不为空则入队。在销毁时,不能先销毁根结点,因为其左子树和右子树是通过根结点访问的,如果根结点先被销毁,则其左子树和右子树在后序程序中无法被访问,会出现错误。满二叉树:一个二叉树,如果其每一层的结点都达到最大值,即结点个数为2^k-1,k为二叉树层数,则该树为满二叉树。(n0为度为0的结点,n2为度为2的结点)

2022-10-15 16:22:21 1013

原创 栈和队列实现

栈是一种特殊的线性表,其只允许在固定的一端进行插入删除。进行数据插入和删除的一端称为栈顶,另一端称为栈底。

2022-10-01 21:01:24 438 1

原创 顺序表和链表

对于顺序表来说,顺序表中存储的元素可以使用数组下标直接访问,无需遍历整个表,所以适用于大量查询元素的实例;而链表在插入和删除元素中,只需改变相应指针指向即可,无需移动大量元素,所以链表适用于大量插入删除元素的实例。顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采取数组存储,在数组上完成增删改查。链表是一种物理结构上非连续,非顺序的存储结构,数据结构中的元素是通过链表中的指针依次链接实现的。动态顺序表:数组元素不确定,使用动态开辟的数组存储元素。

2022-09-23 14:51:09 151

原创 Linux 基础开发工具

预处理(进行宏替换)预处理功能主要包括宏定义,文件包含,条件编译,去注释等。预处理指令是以#号开头的代码行.实例:gcc -E main.c -o main.i选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序。编译(生成汇编)在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查 无误后,gcc 把代码翻译成汇编语言。用户可以使用“-S”选项来进行查看,该选项只进

2022-09-14 15:17:05 1726

原创 C语言 Static关键字的作用详解

1.当static修时局部变量时,变量只能被初始化一次,且static静态局部变量,其生命周期为整个进程,直到程序结束。对于第一段代码来说,它循环5次,每次调用一下fun()函数,而fun()函数每次进去的时候,x的值都为0,所以,当x++后,每次输出的值都为1。当fun()函数未被static修饰时,在 源.cpp 中可以正常执行 test.cpp 中的 fun() 函数,程序正常运行。static对x 只定义一次,x的值不会随着fun()这个函数的结束而被释放掉,直到程序结束,它的生命周期才结束。

2022-09-04 11:07:27 2696

原创 c语言 链表基本操作

当链表不为空时,则需循环遍历链表,找到链表中最后一个结点,然后将其的next域指向新节点,即cur->next=newnode,此时,不需要将新节点的next域赋值为空,因为在创建结点函数中已将next域赋值为空。在进行头插元素的时候,第一步和第二步不能进行交换,如果先进pre->next=s,此时pre->next指向了s,在进行s->next=pre->next,就会使s->next指向自己本身,无法达到预期效果。如果给定位置正常,则直接将给定位置的next指向,给定位置的next的next。...

2022-08-29 14:49:54 8030

原创 函数传参 详解

在平时编写程序时,我们经常会编写一个或多个函数来完成某一个特定的功能,但有时候对于这些函数中的参数,我们却把握不好,有时候参数中加一个&,*,**等这些东西,程序就可以运行成功,但到底什么时候该要这些东西,...

2022-08-27 19:46:55 299

原创 Linux简单操作权限和相关工具

Linux简单操作权限:linux是一个多用户操作系统,可以同时登录多个用户,各自操作各自的,互不影响,这时候就会出现一些问题,比如一个人把另一个代码删除或者修改了,因此系统需要进行权限的控制和设置。系统操作权限:主要将用户分为俩大类:root管理员用户和普通用户,普通用户在系统上的操作是受限制的:比如安装或卸载软件,修改系统时间......在这些基础上,就存在一些指令:su 切换用户 useradd 添加用户 userdel 删除用户...

2022-08-26 16:58:37 454

原创 Linux常见指令详解

指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。一个指令可以完成某一个功能,但是在这个功能中可能会有很多更细致的功能点划分,比如浏览目录就划分出了更多细致的查看详情信息......因此由操作选项来选择要进行的具体操作。...

2022-08-26 10:51:04 192

原创 c语言 文件操作

1. 为什么使用文件当我们在编写程序时,在程序运行结束后,数据就不在存在,当下次重新运行程序时,数据又要重新输入,这就涉及到了数据持久化的问题,我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据库等方式。使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。2. 什么是文件磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)...

2022-08-12 19:02:05 281

原创 深度剖析数据在内存中的存储

数据在内存中的存储,深蹲分析数据如何在内存中的存储

2022-07-10 14:37:37 172 1

原创 c语言 三子棋小游戏

c语言 数组基础

2022-06-23 17:29:20 640 2

空空如也

空空如也

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

TA关注的人

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