- 博客(44)
- 收藏
- 关注
原创 详解Linux项目自动化构建工具之makefile和make
先创建一个源文件mytest.c打开mytest.c文件在vim编辑器中写上hello world代码然后再创建一个名为makefile的文件(文件名一定是makefile不区分大小写)在vim编辑器打开Makefile文件,在Makefile文件中第一行写mytest:mytest.c表示mytest目标文件依赖于mytest.c源文件。
2024-11-30 10:03:56 566
原创 计算机软硬件体系结构
计算机的软硬件体系结构是一个复杂的系统,涉及到硬件和软件的多个层面。硬件提供了计算和存储的基础,软件则管理和控制这些资源,提供用户和应用程序的接口。通过合理的设计和优化,可以提高系统的性能和安全性,满足各种应用需求。希望这篇博客能帮助你更好地理解计算机的软硬件体系结构。
2024-11-21 21:08:27 661
原创 详析multiset和multimap容器
我们知道multimap可以存储重复的key的数据,而operator[]又是通过key进行查找和插入元素,如果multimap重载operator[]就会导致查找出现不确定性。然后还是我来为大家总结一下文档里面的内容。
2024-11-03 22:16:05 267
原创 详析STL之容器map
map 变量名;map里面可以是不同类型。C++文档网址1.我们要知道map中的元素是键值对2.map的key也是唯一的不能修改的,只能修改key所对应的键值value3.map的底层是红黑树,搜索效率非常高,时间复杂度是O(logN)4.map默认是按升序(key从小到大)进行排序的,如果使用迭代器进行遍历,就能得到一个有序的序列。
2024-10-28 20:40:29 707
原创 详析STL之容器set
那么文档里面说的是什么呢?set 变量名;set里面类型可以是任意的类型这篇博客分享了关联容器和序列容器区别,还有键值对定义,还有set容器特点和和set容器的使用。
2024-10-27 23:44:20 882
原创 数据结构之红黑树(超详细版+通俗易懂)
上面我们已经分享完了红黑树的定义和红黑树的性质,那么我们接下来就实践一下吧,定义出红黑树的结点。RED,BLACK,struct RBTreeNode//把结点定义为公有的//数据有key和val//颜色//写结点的构造函数,new函数需要调用结点的构造函数, _kv(kv), _col(RED)//颜色先给为红色{};那么为啥需要把红色设置为默认颜色呢?为了防止破坏每一个路径的黑结点个数相同的性质红黑树的删除。
2024-10-24 12:08:01 936
原创 AVL树(超详细版)
AVL树的性质我们已经知道了,那么现在我们要来定义AVL树的结点了定义AVL树前,我们需要知道AVL树中需要有什么,我们需要有指向左右子树结点的指针,还有指向当前结点的父节点的指针为了方便后面的插入,这里使用三叉链进行实现AVL树)还有为了平衡树的高度的平衡因子,还有存放的数据。//设置为公用的可以在类外访问//平衡因子int _bf;//存放的数据//不理解pair用法的老铁可以去查一下文档//构造函数: _bf(0): _kv(kv){};
2024-10-19 11:49:51 1169
原创 二叉搜索树(超详细+通俗易懂)
/1.结点是公有的K _key;//构造函数{};public://二叉搜索树的插入//如果树为空,就先new出一个新的结点//再把这个结点给根结点//返回true//如果树不为空//parent结点是为了寻找cur的父亲结点//先寻炸结点//插入的结点比根结点大//插入的结点比根结点小//表示该树有该结点了else//在需要插入的位置new出一个结点//再把parent和cur结点链接起来//比较插入的值和根结点的值else。
2024-10-14 23:32:49 491
原创 C++之继承(通俗易懂版)
调试看看派生类是否含有基类的成员变量(1)private(基类的成员是private):如果基类成员(成员函数和成员变量)都是私有继承,那么派生类虽然继承基类,但基类成员在派生类中和在派生类外都是不可见。(2)protected(基类的成员是protected):派生类继承基类,虽然在派生类外不能访问基类成员,但在派生类中可以访问基类成员(3)public(基类的成员是public):派生类继承基类,既可以在派生类中访问基类成员,也可以在派生类外访问基类成员。1.通过以上的对于三种访问限定符的分析
2024-09-18 22:52:59 709
原创 模板(进阶)
template//N不是类型参数public:private:T _a[N];int main()//非类型模板参数是为了固定数组的大小(常量)return 0;这段代码是不是让我们实现了通过Array类的模板创建出了一个大小为100的整形数组。看到这里可能有老铁就会疑惑了,既然是常量,那么除了整形以外的其他内置类型能不能也充当非类型模板参数呢?
2024-09-14 21:43:28 973
原创 STL之my_list容器
list容器有这么多接口,我会从里面挑出常用的接口进行模拟实现。由于我们不知道list容器的类型是什么类型,所以我们需要搞个模板函数,对任意类型的list都适用。然后我们需要搞个类(私有的比较好,防止其他人修改成员变量)把list里面的成员给封装起来接下来我们需要把链表给初始化由于list不支持随机访问,我们只能通过迭代器进行访问list中的结点。所以我们先来实现list的迭代器的接口。由于list迭代器底层是一个指针,所以我们如果需要访问list和修改list,就需要对指针进行解引用和取地址,因
2024-09-02 17:19:12 1230
原创 STL之my_string容器(超详细版)
我们知道STL中已经帮我们实现好了string容器的各个接口,如果我们直接实现my_string就会和STL里面的string冲突,所以我们需要一个命名空间把my_string包围起来,防止和库里面的string冲突。然后我们就可以实现string的构造函数了,string创建对象时可能是带参也可能是不带参,所以我们需要实现两个构造函数,但是在前面我们学过一个缺省参数,所以我们可以把这两个构造函数结合起来实现。string构造对象时如果传的无参,我们就需要一个\0才能判断传参结束,所以这个缺省参数我们可
2024-08-12 14:40:00 606
原创 leetcode43. 字符串相乘
相乘,首先我们就知道了,这两个字符串转化成得数字有可能是0,如果==0,那么直接返回字符串0就行了,如果不为0,我们小学都学过乘法的竖式计算,我们可以先举个例,例如字符串123*字符串45,那么该如何做呢?首先我们肯定是得把字符串转化为数字,必须是一个一个字符的转化,因为题目要求不能直接转化,也不能使用大数相乘标准库,转化为数字后,就按照小学时我们给乘法排竖式的方式进行计算。我们可以看到题目是要求我们将两个字符串转化为。
2024-08-01 16:29:26 284
原创 函数模板和类模板
class Vector//vector不是具体的类,而是一个可以生成任何类型的类的模具public:, _size(0){}private:T* _pData;那么该如何在模板中实现在类中声明,在类外定义,其实也和非模板实现在类中声明,在类外定义差不多,class Vector//vector不是具体的类,而是一个可以生成任何类型的类的模具public:, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();
2024-08-01 14:33:52 890
原创 字符串相加(leetcode算法题)
public://定义end1和end2分别指向字符串num1和num2的末尾//存放数字相加的结果int sum=0;//存放相加后转成的字符串//用于存放字符串转化为数字//只要有一个位数>=0循环就不能停止//对字符串num1进行转化成数字elseval1=0;//对字符串num2进行转化成数字elseval2=0;//对竖式的每一列式子进行相加//对相加得出得结果>=10进行处理if(sum>9)carry=1;sum-=10;else。
2024-07-23 11:19:32 394
原创 C++动态内存的管理
我们来看看new和malloc对于自定义类型开辟空间的不同之处。delete p2;return 0;我们来看看这个代码运行的结果咋出现了调用构造函数和析构函数呢?是谁调用的呢?我们把malloc和free的函数进行注释掉,如果还调用构造函数和析构函数,那么证明是new和delete调用的构造函数和析构函数。
2024-07-16 12:06:31 571
原创 友元函数和友元类
class Time// 声明日期类为时间类的友元类,则在日期类中就直接访问Time类中的私有成员变量public:{}private:int _hour;class Datepublic:{}// 直接访问时间类私有的成员变量private:int _year;int _month;int _day;Time _t;
2024-07-15 11:23:18 320
原创 初始化列表和explicit关键字和static成员
1.每一个成员变量只能在初始化列表中出现一次。2.类中出现引用(在创建时就必须初始化了,而不是实例化时才进行初始化),const(只能进行一次的初始化3.自定义类型成员(且该类没有默认构造函数时)必须使用初始化列表进行初始化(没有默认的构造函数的自定义成员变量如果使用构造函数体进行初始化会调用它自身的拷贝构造函数,如果使用初始化列表会减少不必要的拷贝构造,提高效率4.尽量使用初始化列表进行初始化5.成员变量在类中的声明次序,就是成员变量初始化的顺序,与它在初始化列表中初始化的顺序无关。
2024-07-14 11:44:19 651
原创 赋值运算符重载和const成员函数和& const&函数
6个默认成员函数到这里已经总结完了,这6个默认成员函数分别是构造函数,拷贝构造,析构函数,赋值运算符重载,const成员函数,&和const &函数。
2024-07-07 21:54:16 692
原创 析构函数和拷贝构造函数
析构函数是为了完成清理工作的,但不是对对象本身的清理,局部对象的清理是由编译器自动完成的,析构函数是对对象中的资源的清理。拷贝构造,顾名思义就是对一个对象的拷贝呗。下面来判断一段代码,看看这个代码能否正常运行public:perror("malloc申请空间失败");return;_size = 0;_size++;s1.Push(1);s1.Push(2);
2024-07-04 23:03:58 681
原创 c++类和对象(中)
我们简单讲了6个默认成员函数是那6个成员函数,详细的讲解的默认成员函数的构造函数,构造函数的定义,构造函数的特征,带参和不带参的构造函数。篇幅有限,其他的默认成员函数在下篇博客在总结讲解。
2024-06-14 23:41:02 763
原创 c++类和对象(上)
好了,C++类和对象上半部分到这里就结束了,我们在上半部分总结了,类的定义,类的实例化,类的大小,还顺带复习了c语言内存的对齐规则,最后总结了this指针的内容。
2024-06-11 23:58:30 400
原创 C++类和对象(上)
定义一个类的成员有两种方式,可以在类的里面定义(和上面的一样) ,也可以在类外定义,那么如何在类的外面定义一个成员呢?在类外定义一个成员,需要指定这个成员所属的类。//定义一个日期的类//一般常用class关键字定义类class Datepublic://在类里面先声明在类外定义的函数//声明一般放在.h文件中private:int _year;//这里变量的命名为何会带_后面会解释int _month;int _day;//private的作用域就到这个为止了。
2024-06-08 23:23:16 964
原创 C++基础(引用和内联函数)
int a = 0;int& b = a;int& c = a;int& d = a;使用内联函数的汇编代码图,图中显示Add内联函数并没有在栈帧上开辟空间,而是直接展开了代码。注意:内联函数只是向编译器发出的一个请求,编译器可以拒绝该请求,将函数规模较小(即函数不是很长,具体没有准确的说法,取决于编译器内部实现)、不是递归、且频繁调用的函数采用inline修饰,否则编译器不会采用inline修饰。在定义一个指针时,需要给该指针初始化,在c语言中给指针初始化为空是int* a=NULL;
2024-06-05 19:52:55 1038
原创 C++基础
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参,则采用该形参的缺省值,否则使用指定的实参。可能定义读起来有点晦涩难懂,那么我们来画一画图吧!// 1、参数类型不同//2、参数个数不同void f()//3、参数类型顺序不同以上是简单的例子。
2024-06-02 10:35:27 422
原创 HDU刷题总结(C语言版)
这连个知识点就是笔者今天笔者分享的,如果各位大佬有什么好的解决方法,请私信交流或评论区交流;好了今天就到这了,笔者会不定时更新一些有趣的c语言的知识点。
2024-05-25 21:10:02 697
原创 吃了就吐的栈和吃了就拉的队列
1.栈的实现可用顺序表和链表实现,但用顺序栈比较优,为什么呢?因为在顺序表中入数据代价比较小,在链表中入数据还得开辟结点保存结点,需要内存的代价比较大。链式栈的入数据的图示:这二者的优劣一目了然。由于静态顺序栈在实际 中不实用,这里我们只来了解动态的顺序栈。我们要构建一个能动态增长的顺序栈,要明白顺序栈中应该有什么内容,首先需要有一个整形指针指向一块内存空间,还有一个整形变量表示栈顶(毕竟出入数据都需要用到栈顶),还需一个变量表示栈的大小int top;// 栈顶// 容量}Stack;
2024-05-13 23:47:04 603
原创 透析Linux的安装包管理器yum和vim编辑器和gcc编译器
对于初学Linux者肯定会好奇在linux上安装软件为何如此"方便",并不像windows上安装软件还得到官网搜,在本文笔者会分软件管理是什么。软件管理器如何操作和对于软件管理器的总结三个部分来为有此疑惑的读者进行解惑;对于初学Linux者会很头疼于vim编辑器的使用,常常会因为指令不熟悉和不认识指令从而“无从下笔”,在本文笔者也会通过vim编辑器是什么,vim编辑器的指令操作和vim编辑器的总结三个部分带领读者深入了解vim编辑器;
2024-05-02 12:00:30 639 1
原创 链表(通俗易懂)
注意:图中箭头是人为想象出来的,内存中并不存在**由于本篇博客篇幅过于长了,笔者在下篇博客再对带头双向循环链表进行实现,以上就是笔者对单链表进行的总结,欢迎各位看官与笔者一起讨论。
2024-04-04 16:16:23 649 1
原创 数据结构内容总结(顺序表)yhk
笔者写本文有三个作用,1.笔者由于刚学完数据结构的内容想要对所学内容进行总结;2.笔者也想写出总结内容为读者提供复习的机会;3.笔者也希望能得到各位看官的笔者所总结内容的评价。笔者会用c语言实现代码提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
2024-03-30 23:40:49 766
原创 C语言知识总结(数组)
对于c语言学习者来说,数组是c语言常用的内容,在c语言中,数组是非常重要的概念,它在内存管理、数据处理和函数传递等方面发挥着至关重要的作用。数组提供了一种存储和访问相同类型数据的方式,能够高效地存储多个数据元素。以上就是今天要讲的内容,本文仅仅简单介绍了数组的创建,遍历,传参。
2024-03-09 12:41:24 386
原创 C语言在数组中寻找单身狗的问题(剑指offor)
int i = 0;//用来装第一个单生狗//用来装第二个单生狗for (i = 0;i < sz;i++)//这一步是将arr数组中每一个元素都进行异或,从而寻找出两个单身狗//然后将这个两个单生狗进行异或for (i = 0;i < 32;break;for (i = 0;i < sz;i < sz;i++)printf("单生狗数字:%d %d\n", sum1,sum2);int main()
2024-01-14 22:13:32 551 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人