
笔记
文章平均质量分 76
ld0524
这个作者很懒,什么都没留下…
展开
-
C++智能指针
智能指针是什么,它的实现原理,C++个版本的智能指针原理及其实现原创 2022-07-28 09:35:34 · 1105 阅读 · 0 评论 -
多线程(下)
一、信号量1.回忆下互斥锁+条件变量实现生产者与消费者模型的代码我们在判断资源是否可用的时候是程序员使用while循环来进行自己判断的,那么我们不想每次在访问资源的时候手动进行判断,那么我们就需要用到信号量了。2.信号量的原理资源计数器+PCB等待队列资源计数器:执行流获取信号量,获取成功,信号量计数器减1操作,获取失败,执行流放入到PCB等待队列中,执行流释放信号量成功之后,计数器加1操作。生产者与消费者原理图:3.信号量的接口初始化接口:int sem_原创 2022-05-10 10:00:00 · 771 阅读 · 1 评论 -
C++继承
一、继承的概念和定义1.继承的概念面试官:介绍下你所认识的继承?答:继承的概念:继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类型的基础之上进行扩展,增加功能,这样产生的新类,称作派生类。继承呈现了面向对象设计的层次结构,体现了由简单到复杂的认知过程,以前我们接触的复用都是函数复用,继承是类设计层次的复用。举例:例如动物就是一个类,而狗就是建立在动物这个类的基础之上创建的类,它继承了属于动物所共有的特点,又有自己所独有的特点,狗和动物就属于继承的关系,动物就是原创 2022-05-06 19:59:54 · 1063 阅读 · 0 评论 -
vector
一:vector的相关使用与操作vector是表示可变大小数组的序列容器1.构造和析构2.迭代器3.容量的操作4.元素访问5.修改二:迭代器失效三:vector的模拟实现原创 2022-04-16 22:20:01 · 649 阅读 · 0 评论 -
string类的模拟实现以及浅拷贝问题
目录问:为什么要有string类?介绍一下标准库中的string类浅拷贝的问题以及解决方法:1.回顾浅拷贝问题:2.浅拷贝的两种解决方法>>1.深拷贝>>2.写时拷贝string类的模拟实现:问:为什么要有string类?答:C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问原创 2022-04-06 19:36:41 · 1053 阅读 · 0 评论 -
STL容器
STL:standard template library-----标准模板库面试题:什么时STL?1.STL:standard template library----C++中的标准模板库2.通俗来说:STL就是将常见的数据结构以模板的方式进行封装,包含常用通用的泛型算法。数据结构:顺序表、链表、栈和队列、堆、二叉树、哈希等3.具体来说,STL中有六大组件a.容器>>序列式容器----线性数据结构string:动态类型的顺序表---只能存储字符---字符串v原创 2022-04-06 16:34:19 · 829 阅读 · 0 评论 -
C++类和对象(下)
一、再谈构造函数1.构造函数体赋值通过我们之前对构造函数的学习,我们知道了创建一个函数的时候编译器会自动调用构造函数,而我们也可以通过构造函数对类中的成员变量进行赋值,注意,这里说的是赋值,与初始化是不同的。那么什么是初始化呢?简单来说就是在创建变量的时候进行赋值,而且初始化只能有一次,而赋值却可以有多次。我们运行下面的代码:class Date{public: Date(int year, int month, int day) { _year = year; _mo原创 2022-04-03 17:45:26 · 893 阅读 · 0 评论 -
C++动态内存管理
问题:1.string和sizeof的区别2.malloc、calloc和realloc的区别3.malloc和new的区别与联系一、C/C++程序运行起来后,内存分布情况为什么操做系统设计的时候,需要将完整的内存空间化分成不同的区域?方便对内存空间进行管理。如上图:1.栈又叫做堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。2.内存映射段是高效的I/O映射方式,用于装载一个共享内存的动态内存库。用户可使用系统接口创建共享内存,用于进程间通信。原创 2022-03-31 20:26:02 · 3252 阅读 · 1 评论 -
C++-----模板
一、泛型编程如何实现一个交换函数呢?void Swap(int& left, int& right) { int temp = left; left = right; right = temp;}void Swap(double& left, double& right) { double temp = left; left = right; right = temp;}void Swap(char& left, char& ri原创 2022-03-31 18:45:57 · 2679 阅读 · 0 评论 -
Linux进程信号
一、信号的概念信号是一个软中断,只是告诉有这样一个信号,但是这个信号具体怎么处理,什么时候处理由进程决定的,所以是软中断。举个不恰当的例子:看到了红灯你可以选择走也可以选择不走,绿灯你也可以选则走,也可以选择不走。二、信号的产生1.硬件产生(键盘敲):例如:ctrl + c:2号信号 SIGINT(退出一个进程)ctr + z:20号信号 SIGTSTP(终止一个进程),可以通过ps aus | grep “进程名”查看(运行着的进程)进程状态ctr + | :3号信号SIGQU原创 2022-03-27 00:17:43 · 425 阅读 · 0 评论 -
C++类(中)------6个默认成员函数
空类什么都没有吗?不是什么都没有,编译器会给类生成6个默认的成员函数:1.构造函数----->用来进行成员对象创建时的初始化工作2.析构函数------>对象销毁时资源的清理工作3.拷贝构造、赋值运算符的重载---->用来进行对象的拷贝4.两个取地址&的重载问:什么叫默认的成员函数?答:用户没有自己写,编译器会自动生成;一旦用户显示提供了编译器不再生成。一、构造函数1.概念我们知道在定义一个内置类型变量的时候,我们可以对其进行初始化,如下:原创 2022-03-24 23:09:50 · 1557 阅读 · 0 评论 -
系统章节-----进程间通信
1.为什么需要进程间通信?每一个进程的数据都是存储在物理内存之中的,进程通过各自的进程虚拟地址空间进行访问,访问的时候,通过各自的页表的映射关系,访问到物理内存。从进程的角度看,每个进程都认为自己有独立的4G的空间,至于物理内存当中如何存储,页表如何映射,进程是不清楚的。这也造成了进程的独立性:好处:让每个进程在运行的时候都是独立运行的,数据不会窜。坏处:如果两个进程之间需要数据交换,那么由于进程独立性,就没有那么方便了所以:进程间通信本质上是进程和进程之间交换数据的手段。2.常见的进程原创 2022-03-22 10:40:37 · 4441 阅读 · 0 评论 -
C++类的认识(上)
问题:1.面向对象和面向过程初步认识2.类和认识与结构体做区别3.封装特性4.this指针的认识5.this指针存在哪里?6.this指针可以为空吗?1.面向对象和面向过程C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用的方式解决问题。比如洗衣服这件事:我们可以将它分成以下几个步骤:C++是面向对象的,关注的是对象,将一件事拆分成不同的对象,靠对象之间的交互完成。比如洗衣服这件事就可以分为四个对象:人,衣服,洗衣粉,洗衣机.原创 2022-03-21 21:11:16 · 1196 阅读 · 0 评论 -
C++简单的入门知识,这些问题你会了吗?
问题:1.命名空间是什么?2.函数重载是什么?为什么C语言没有函数重载而C++有函数重载?3.传值和引用的效率哪个更高?4.引用和指针哪个效率更高呢引用和指针的区别?5.auto关键字的使用6.NULL和nullptr的比较1.C++关键字C++总计63个关键字,C语言32个关键字2.C++命名空间在C语言中,你是否会会因为变量的起名字而苦恼呢?当我们和别人一起开发一个项目的时候,自己负责自己的模块,互不干扰,但最后将代码进行整合,这时候就会出现问题了,有.原创 2022-03-18 17:29:28 · 1418 阅读 · 8 评论 -
系统章节-----基础IO
1.复习下C的文件接口fopen:打开文件 FILE *fopen(const char *path,const char *mode)path:带有路径的文件名称(如果说不带有路径,打开的文件可以是在当前路径下)mode:打开文件的方式下表为一些常见的mode文件使用方式 含义 如果指定文件不存在 “r”(只读) 为了输入数据,打开一个已经存在的文本文件 出错 “w”(只写) 为了输出数据,打开一个文本文件 (输出...原创 2022-03-05 21:23:44 · 1230 阅读 · 0 评论 -
堆的创建以及堆的基本操作
一、堆的基本概念概念:将元素储存在一维数组中--->形成一颗完全二叉树 条件限制:每个节点比其孩子节点都大(小)--->大(小)堆大堆:二、堆的特性特性:堆顶元素是所有元素中最大(小)的 任意节点都比其孩子节点大(小) 从堆顶到所有叶子路径中是降序(升序)三、堆的相关操作1.创建堆头文件:#pragma once#include<stdio.h>#include&...原创 2021-12-06 17:43:13 · 3104 阅读 · 0 评论 -
栈以及队列的实现与基本操作
目录一、栈1.栈的基本概念2.如何实现一个栈1.>用数组实现一个可以动态增长的栈(建议)2.>栈的链式存储3.栈的基本操作1.>栈的创建2.>栈的初始化3.>入栈操作4.>出栈操作5.>获取栈顶元素6.>栈空的判断7.>栈的销毁二、队列1.队列的基本概念2.如何实现一个基本队列1.>顺序队的实现2.>链队的实现3.>循环队列的实现3.队列的基本操作(..原创 2021-12-02 16:14:56 · 1851 阅读 · 2 评论 -
如何用两个栈实现一个队列?
首先我们需要先实现栈的一些基本操作(创建,销毁,入栈,出栈,获取栈顶元素,栈的判空)具体代码如下:typedef char STDataType;typedef struct Stack{ STDataType* _a; int _top; // 栈顶 int _capacity; // 容量 }Stack;// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0 int StackEmpty(Stack* ps){ assert(ps); return 0 == p原创 2021-11-29 16:44:04 · 255 阅读 · 1 评论 -
实现一个可以动态增长的栈以及栈的基本操作
头文件:#pragma once#include<stdio.h>#include<windows.h>#include<assert.h>#include<malloc.h>// 支持动态增长的栈typedef int STDataType;typedef struct Stack{ STDataType* _a; int _top; // 栈顶 int _capacity; // 容量 }Stack;// 初始化栈原创 2021-11-29 16:24:58 · 157 阅读 · 0 评论 -
动态内存管理(堆区)
为什么存在动态内存管理1.可以申请大块内存,进行较为大型的应用2.可以在程序运行期间进行申请,可以更灵活的使用内存空间。(申请空间用malloc()函数,必须是程序运行起来才能调用,编译的过程早就过了)如何进行空间管理?通过malloc函数申请空间和使用,用free函数释放空间常见细节:1.整体申请,整体释放。2.如果申请内存不归还,会造成内存泄漏。内存泄漏:一种严重的问题,会造成可用内存越来越少。 进程退出了,内存泄漏问题就不在...原创 2021-11-05 21:10:00 · 602 阅读 · 0 评论 -
常用字符串操作库函数的模拟实现
目录1.模拟实现strlen2.模拟实现strcpy3.模拟实现strcat4.模拟实现strstr5.模拟实现strcmp6.模拟实现memcpy7.模拟实现memmove1.模拟实现strlen2.模拟实现strcpy3.模拟实现strcat4.模拟实现strstr5.模拟实现strcmp6.模拟实现memcpy7.模拟实现memmove...原创 2021-11-01 15:47:46 · 122 阅读 · 0 评论 -
结构体、枚举、联合
结构体为什么会存在struct?计算机是为了解决人的问题,人认识自然世界的方式是通过“属性”认识的。任何事物抽象出的属性集合,都可以用来表示一类事物,及类型,这个工作中,c中,struct。结构体类型的声明struct tag{member_list;}variable_list;特殊的声明(在声明结构体的时候,可以有不完全的声明)比如://匿名结构体类型struct{ int a; char b; float c;}x;struct{原创 2021-10-31 08:47:39 · 139 阅读 · 0 评论 -
字符函数和字符串函数
目录前言:1.求字符串长度strlen2.长度不受限制的字符串函数1>strcpy(字符串拷贝)2>strcat(字符串链接)3>strcmp(字符串比较函数)3.长度受限制的字符串介绍1>strncpy2>strncat3>strncmp4.字符串查找1>strstr(子串查找)2>strtok(分割字符串)5.错误信息报告strerror6.字符操作7.内存操作函数1>原创 2021-11-01 15:48:38 · 173 阅读 · 1 评论 -
深度剖析数据在内存中的存储——浮点数的存储
一、十进制小数转换为二进制小数十进制数的整数位是二进制数的整数位,十进制数的小数位是二进制数的小数位。两部分分开转换。整数部分 除以2取余,逆序排列。小数部分 乘 2 取整,顺序排列。注意:为什么原理如上?首先有一点需要明白,十进制和二进制比较的基准点在哪里?也就是说,哪个数在十进制和二进制里面,都是代表相同的大小,必须找到这个基准点,然后才好讨论。很明显这个基准点是个位数1,十进制中的1和二进制中的1都是表示相同的大小的值。那么以1这个基准点为基础,整数部分,十进制是逢十进一,二进原创 2021-10-15 16:31:32 · 171 阅读 · 0 评论 -
深度剖析数据在内存中的存储-整形的存储
重点知识:一、数据类型的详细介绍。二、整形在内存中的存储。三、大小端字节序介绍及判断。内容:一、数据类型的详细介绍。1.数据类型的介绍:内置类型(char/short/int/long/long long/float/double)另外C语言没有字符串类型。类型的意义:(1)使用这个类型开辟空间的大小(大小决定了使用的范围)(2)如何看待内存空间的视角(给程序员看的)。注意:数据的存入和目标变量没有关系,目标变量只提供空间。2.类型的基本归类:整形+浮原创 2021-10-08 16:12:14 · 141 阅读 · 0 评论 -
冒泡排序
#include<stdio.h>#include<windows.h>extern void BubbleSort(int arr[], int sz);static void Swap(int *p,int*q){ int temp = *p; *p = *q; *q = temp;}int main(){ int arr[] = { 1, 12, 45, 5, 8, 14, 44 }; int sz = sizeof(arr) / sizeof.原创 2021-05-30 14:48:22 · 88 阅读 · 0 评论 -
一个新学的恶搞关机程序
这是一个有趣的关机程序#include<stdio.h>#include<windows.h>#include<stdlib.h>#include<time.h>#pragma warning(disable:4996)void ShutDownWin(){ system("shutdown-s-t 120"); printf("你的电脑正在被关机.....\n"); int count = 3; char i...原创 2021-05-16 23:23:40 · 226 阅读 · 0 评论 -
2021-05-06
作为大二的一名学生,我终于在今天选择了自己的道路,那就是成为一位IT行业工作者。其实在我选这个专业的时候我就以为自己将来会成为以为程序员,当时就是抱着成为一位nb的黑客而选择的这个专业,虽然在大一的时候我们也开设了c语言这门课,本以为自己可以走上这条路了,但是当真正的学习之后才知道了这条路的难,而且当时很难有实际操作的机会,所以就把自己的这个想法搁下了,本以为自己已经没有这个机会走上这条路了。终于,在考研与成为一位IT者这两条路上,我选择了这条路。博客是老师给我们的任务,也是我以后IT路上激励我的一种方式。原创 2021-05-06 17:02:49 · 154 阅读 · 1 评论