自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C/C++的内存管理(2)——new与delete的内核与本质

对于自定义类型由于需要调用构造函数与析构函数,因此new与new[]、delete与delete[]会有更大的区别,new[]会在必要时在头部多开辟四个字节的空间以存储[]内的值new的原理调用operator new函数申请空间在申请的空间上执行构造函数,完成对象的构造 delete的原理delete原理在空间上执行析构函数,完成对象中资源的清理工作调用operator delete函数释放对象的空间newT[]原理。

2024-02-24 15:26:46 908 3

原创 C/C++的内存管理(1)

例如:创建链表节点:C语言实现如下:C++实现如下:以上的对比大家是不是对new有了新的认知,它确实是十分的方便,因为它与类和对象的特点进行了有机的结合,以后我们开辟空间首选肯定就为new了,

2024-02-22 22:49:25 977

原创 类与对象(终章)——友元,内部类,匿名对象

类与对象终,友元,内部类.....

2024-02-07 17:02:57 454

原创 类与对象——再谈构造函数,static成员

类与对象——初始化列表,static成员

2024-02-06 20:12:36 964

原创 类与对象实例应用——日期类的实现

此前,我们对日期类已经有了一定的认识,接下来的一节,我们将通过完整的编写一个日期类来巩固之前所学的类与对象的知识并从其中拓展出一些零碎的知识点。

2024-02-05 23:14:24 817

原创 类与对象——6大默认成员函数(二)——运算符重载与赋值重载

C++为了增强代码的可读性引入了运算符重载,运算符重载就是有特殊函数名的函数那这个特殊的函数名是什么呢?关键字:operator例如,现在我需要重载上述写到的两个判断函数:你以为重载仅仅是换了一个函数名吗?那你太小看他了,从此以后我们比较日期类的大小就可以通过下述方式:自定义类型以后可直接用内置类型才能用的运算符直接做各种运算了。当然,由于我们的成员变量一般都是私有,在类外一般不可访问,最好的解决方案是将运算符重载放在类的里边此时别忘记 this 指针。

2024-02-04 21:52:30 775 1

原创 类与对象——6大默认成员函数(一)

默认成员函数

2024-02-04 15:51:13 1106 1

原创 C++ :类与对象——this指针

经过之前的学习我们已经知道,类对象的成员函数存储位置并不在对象内部而在一个公共代码区,那既然如此,我们每次创建一个对象使用对象的方法都需要调用同一个函数,那编译器怎么知道我们要调用哪个对象从而进行正确的传参呢?没错,在这其中就有我们的——在C++中,this指针是隐藏在成员函数里的形参;(2)this指针是一个隐藏的参数,我们。,this指针指向的内容则可以被修改。,对象中不会储存this指针。(1)this指针本省的类型是。

2024-02-03 17:25:12 194 1

原创 打开类与对象的大门——C++

那类是什么呢?类其实就是有成员变量与成员函数构成的集合体。== class关键字==class name//内部就是成员变量与成员函数以后类的书写有两种方式:同时,以后不用加 struct 限定即可创建变量;当然以上两种创建方式可以混用,因为C++支持C语言,至于两者有何区别,我们后续会继续深入讨论(一般C++习惯使用class)。类有两大定义方式:(1)声明与定义全部都放在类体中,其中这种定义方式成员函数有可能被编译器识别为内联函数处理,(2)声明与定义分离。

2024-02-02 22:56:05 901

原创 内联函数、auto关键字——初识C++(终)

C++新手的宝藏库

2024-01-30 20:26:28 1014 1

原创 数据结构——约瑟夫问题

据说著名犹太历史学家 Josephus 有过以下故事:在罗马人占领乔塔帕特后,39 个犹太人与 Josephus 及他的朋友躲到一个洞中,39 个犹太人决定宁愿死也不要被敌人抓到,于是决定了一种自杀方式,41 个人排成一个圆圈,由第 1 个人开始报数,报数到 3 的人就自杀,然后再由下一个人重新报 1,报数到 3 的人再自杀,这样依次下去,直到剩下最后一个人时,那个人可以自由选择自己的命运。解析:本题重点考察链表的创建与删除,需要编码者对链表的基本性质有较为深刻的理解。注意控制报数与指针走的步数的关系。

2024-01-30 11:50:11 168 1

原创 函数的重载、引用——初识C++(2)

但这些函数的。

2024-01-28 21:02:09 989

原创 初识C++(1)

namespace//定义变量int a;int b;//定义结构体struct A {int I;int LOVE;int YOU;//定义函数return x+y;//命名空间的嵌套int a;//.....命名空间的特点:1.命名空间内部可定义变量、函数、类型2.命名空间支持嵌套。我们了解了命名空间域的基本特性,不妨来回忆一下C语言学习期间的作用域的概念。我们之前知道:作用域有——全局域,局部域;今天的命名空间也属于作用域,我们。

2024-01-27 22:51:33 1051

原创 排序算法——快速排序

三数取中优化的优化程度最高,它的原理很简单,每次我们分类之前能得到三个值(begin、end、(begin+end)/2),我们尽可能选择三个数的中位数当标准与keyi交换,这样能较大程度的减小递归的次数,从而达到提高效率的要求。在人类社会,任何事物都有自己的一个分类标准:我们把大于60岁的人叫做老人,身高大于180cm的人我们都会说他很高。理论上而言,我们的keyi可以是数组内任意一个数,由于需要递归,为了方便,我们取每个数组的首元素为标兵(keyi)。的一个过程,第一想法肯定是递归。

2024-01-26 21:09:36 1038 1

原创 排序算法之——归并排序

我们要进行局部的合并,首先就要考虑如何进行局部分割,考虑到合并时我们需要有序数组进行合并。我们将待排数据从中间分割成较小的数据,经过数次分割,数据组被我们分割成单个数据(该部操作本质上就是递归的大问题化小问题思想),可采用递归实现。当分割到一个元素时,2.拷贝时,我们要边合并边拷贝,不能所有合并结束之后才开始拷贝,这是因为没一次合并我们都会改变数组的顺序,改变之后的数组是下一次合并的数组基础。1.进行合并时别忘记拷贝这一操作,同时由于有拷贝这一操作,我们写代码时,最好将归并操作重新用一个函数进行分装。

2024-01-24 00:40:16 930 1

原创 插入排序与希尔排序

顾名思义,。具体的实现操作我们如下动图所示:实现代码如下:升序我们需要找比排闭数据小的数进行插入操作,反之则需要找大的数据。找数据时我们需要每次往前循环反复交换,直到排好的数据中没有比该待排数据大(小)的数据,这样我们就完成了一次循环。之后我们继续排下一个数据,依次循环遍历完数据组中的所有数据。根据写好的代码我们能看得出,插入排序的时间复杂度为。

2023-12-07 16:35:20 38

原创 “向上调整建堆”与“向下调整建堆”的算法比较

我们之前已经学习了两种建堆的方式:向上调整建堆与向下调整建堆。那这两种算法哪一种更好哪个效率更高呢?本节内容我们将从时间复杂度的角度来进行分析比较。

2023-12-02 14:18:35 57 1

原创 趣味堆问题——堆排序

我们也能直接利用堆来进行排序,但直接建立一个堆进行排序操作实在是有点小题大作,前面已经着重讲了堆的向下调整与向上调整思想,我们能不能将数据创建成堆之后利用这两种思想进行排序呢?答案是当然有,接下来,让我们一起走进这种新的排序方式——交换后,我们调整的数据个数减一以排除最小的数据,其余的数据继续建堆并交换堆顶与最后一个数据,这样循环直到调整到堆顶为止。如图,假设我们要对这个已经建成的小堆进行排序,首先我们能想到的是堆顶我们已经确定它为最小值,在后续排序中我们不希望再处理堆顶的数据,因此我们将。

2023-12-01 22:05:23 42 1

原创 堆的实现与相关操作

(以此来保证向下调整的子树都为堆)。

2023-12-01 21:21:57 42 1

原创 “数据旅馆”顺序表——数据结构(2)

顺序表的底层逻辑是数组,它用一段物理地址连续的储存单元依次存储数据元素的线性结构。顺序表分为静态顺序表与动态顺序表。本节我们只介绍动态顺序表。其实顺序表的结构搭建类似于旅客住旅馆,旅客向旅馆申请住宿,旅店老板给了旅客一个房间以便休息,当旅客不再需要房间时即可归还房间。顺序表对数据的处理就很类似与这个过程,数据相当旅客,而内存地址就是房间号码,而每个房间顺序是固定不可移动的它们都有属于自己的房号,顺序表就是将各个需要处理的数据存储在“旅店的房间”里。

2023-11-03 13:18:32 65 2

原创 函数的“递归”

在C语言中,,这种调用的过程叫做函数的递归。但是,并不是所用的函数都能实现递归操作,若递归无终止的,那递归将无线进行下去,造成。这个代码并不能跑过去,因为并没有结束的条件,栈溢出。因此,“套娃”操作的不是无脑套娃,递归的存在有着实际的价值,能解决许多实际的问题。

2023-10-31 20:17:41 85 3

原创 程序员与计算机的“时空”较量——数据结构(1)

在日常生活中,我们也许总为摆放物件而发愁,而又或者做某件而苦恼。同样计算机虽然有着“超级大脑”,当计算时间过长或者开辟内存过多,它也会发愁,从而导致运行效率与性能降低。这时候计算机解决不了的问题就抛给了程序员,与给了程序员一个,同时它们也是判断一个的可靠指标。目前,随着时代的进步,计算机的储存容量已经大有提高,程序员在开发过程中已经不再过多的考虑算法的空间复杂度。下面让我们一起走进本节内容。

2023-10-30 15:02:26 72

原创 混沌的你与“熵减的C”1

C语言是一种人与计算机交流的语言,而一串串长长的代码犹如汉字是构成C语言的“小零件”;当然计算机语言还有很多种,就像世界上不止汉语一种人类语言还有英语、法语…C语⾔就是众多计算机语⾔中的⼀种,当然C++/Java/Go/Python都是计算机语⾔与C语言打了照面,那我们如何和它“交朋友”呢?正如写文章需要纸和笔,我们编写C语言程序也需要借助工具,而这个工具就是编译器。C语⾔源代码都是⽂本⽂件,⽂本⽂件本⾝⽆法执⾏,必须通过编译 器翻译和链接器的链接,⽣成⼆进制的可执⾏⽂件,可执⾏⽂件才能执⾏。

2023-07-20 23:31:09 68 1

空空如也

空空如也

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

TA关注的人

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