自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 黑马程序员c++ 文件操作

程序运行时产生的数据都属于临时数据,程序一旦运行结束都会释放通过c++中对文件操作需要包含头文件(file stream 文件流)文件类型分为两种。

2024-07-15 20:15:00 1556

原创 黑马程序员c++ 多态

执行测试案例,我们将实例化的Cat对象创建在堆区,由于Animal是Cat的父类,会先调用Animal的构造函数,再调用Cat的构造函数,最后释放堆区空间,但问题是,由于我们用Animal指针释放堆区空间,所以这里不会执行Cat的析构函数,只会执行Animal的析构函数。但这里我们传入的是子类对象,目的调用子类speak函数,所以我们就不能早早的在编译时确定Animal类的Speak函数地址,而要让子类对象传入是在确定函数地址,这时我们就可以在Animal类的Speak成员前加上。

2024-07-15 20:00:00 1540

原创 黑马程序员c++ 继承

可以看到Sheep原来的int类型变成了vbptr(virtual base pointer)虚基类指针, 指向下面的vbtable(virtual base table)虚基类表,这时通过SheepTuo访问成员变量时就会通过虚基类指针获得虚基类表中的偏移量,通过偏移量访问唯一的,Animal类中的m_Age成员变量。在上面代码中,s.m_A会直接访问子类中的成员,而在对象的点元素符后加上父类作用域,就可以访问父类中的成员。需要注意的是,如果子类中没有与父类同名的成员,s.m_A会直接访问父类中的成员。

2024-07-15 19:45:00 725

原创 黑马程序员c++ 运算符重载

在上面的代码中,将p1赋值给了p2,这时用默认的赋值运算符就会将p1中m_Age逐字节赋值给p2,所以p1,p2的m_Age就指向了同一块内存,而text函数结束时,p1执行析构函数将p1.m_Age指向的空间释放,p2在执行析构函数时再将p2.m_Age指向的空间释放就会造成空间的重复释放,编译器就会报错。需要注意的是,在全局函数的参数列表中我们要额外加入参与运算的对象,后置运算符的参数列表中要将占位符放在对象之后,在全局作用域下的运算符函数要在设置为类的友元,以访问类中的元素。

2024-07-15 19:30:00 911

原创 黑马程序员c++ 友元

方法:在类内加友元函数声明:friend void func();方法:friend void Person:: func(){};方法:friend class Person;作用:使成员函数可以访问类中的私有属性。作用:使类外函数或类访问类内私有属性。作用:另一个类可以访问类的私有属性。

2024-07-15 19:15:00 160

原创 黑马程序员c++ 对象特性

在上面代码中,如果将PersonAddAge返回值改为Person类型,那么p1.age就不会改变,原因在于,PersonAddAge从引用返回变为了单纯的值返回,返回了一个新的Person对象,而没有继续改变p1的年龄。通过运行上面的代码,我们可以知道,空对象占用的内存空间大小为1,c++编译前会给每个空对象也分配一个字节占用块空间,来区分不同空对象占内存的位置,每个空对象都有一个独一无二的内存地址。在对象前加const,变为常对象,常对象只能调用常函数。,完成对象的初始化和清理工作。

2024-07-15 19:00:00 557

原创 黑马程序员c++ 封装

在c++中,通常将封装出来的整体叫做 类例如我们可以设计一个圆类,这个类可以求出圆的周长上面的代码中,class代表着一个类,后面紧跟着的是类的名称。在类中主要包含。其中权限在以后会讲解,。。

2024-07-15 18:45:00 338

原创 黑马程序员c++ 函数高级

例如参数为const int &a的,(只能接受常量和const变量),就可以和参数为int &a(既能接受常量也能接受变量)的函数重载。函数重载情况多样,但只要明白原理,很多时候也能自己判断。

2024-07-15 18:30:00 1594

原创 黑马程序员c++ 引用

例如在上述代码中,text类的函数作用是打印a的值,但在text0中,误操作将a值变为了10,而在text1中,因为引用被常量修饰,相当于const int * cont a = &a,既不可以修改指针的指向,也不可以通过指针来修改变量的值,这样在发生误操作 a = 10,时,编译器就会报错(这里将报错的操作注释起来)。返回值为引用的函数也可以作为左值,所代表的操作就是返回变量的引用,再通过引用来修改函数中的变量。在函数形参列表中,可以加const修饰形参,防止形参通过引用修改实参。

2024-07-15 18:15:00 269

原创 LeetCode 15.三数之和(C语言)

给你一个整数数组 ,判断是否存在三元组 满足 、 且 ,同时还满足 。请你返回所有和为 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]解释:nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。nums[0] + nums[3] + n

2024-07-05 21:30:26 736

原创 LCR046二叉树的右视图(C语言)

因为先序遍历是从根节点到左子树,再到右子树依次访问树的节点的,可以想见,如果我们用一个数组来存储遍历的结果,用变量 i 来控制数组在递归中的下标,那么递归的每一层变量 i 的值都是相同的,那么树中较长的子树远离根节点的节点(没有被右侧节点盖住的下方节点)就会被保存在数组中,而被右侧节点挡住的节点,在最后都会被最右侧节点覆盖。在完成一层的节点访问后,tnode节点记录了最后一个被访问的节点,就是该层中最右端节点,直接将该结点的值记录到array数组中。

2024-05-18 16:38:28 417

原创 浙江大学数据结构哈夫曼树(C语言)

计算机对数据进行存储通常采用等长码的形式,假如说每个字符计算机都用八位进行存储,一篇一万个字符的文章,总共就需要八万位来存储,但实际上,文章中每个字符出现的频率是不一样的,例如:字符e的出现频率就远大于字符x的出现频率,如果我们能够用更小的存储空间存储字符e,那么即使字符x占用的存储空间变大了,也可以起到提高空间利用率的效果。那么对于已知频率不一样的字符,我们如何对他们进行编码呢?在这之前,我们要先知道哈夫曼树是什么。

2024-05-18 15:01:13 977

原创 LeetCode105,106中序和先序,后序构建二叉树

构建一棵二叉树,需要中序和先序后序中的一种进行搭配,中序和先序构建二叉树,中序和后序构建二叉树,而只有先序后序遍历是无法构建成功的。

2024-05-17 20:19:49 177

原创 LeetCode.215.数组中的第K个最大元素

刚开始直接用的快速排序,然后取出第k大的元素,虽然时间复杂度是O(nlogn),但还是算我通过了。后来有用了堆排,思路是用最大堆排序,不过思路较一般堆排序有了一点优化,不断把堆顶元素放到最后,直到弹出第k个元素就是第K个最大元素。

2024-05-12 13:01:58 332

原创 浙江大学数据结构 快速排序 C语言

其思路就是在一堆元素中选取一个(pivot),将元素中小于主元的划为一个, 大于主元的划为另一个子集,递归地再将两个子集进行划分,直到最后划分的子集中只有一个元素,就完成了排序。对于主元的选取,一个很自然的想法是,每次都,但如果待排数组本身就是从小到大的(或者已经是高度有序的),那么每次都只能划分出大于主元的一个子集,这样的,是非常慢的。当然,我们为了避免这种情况的发生,也可以利用随机函数在数组中,但。如果选取。

2024-05-11 11:26:57 538 1

原创 浙江大学数据结构 堆 C语言

当我们需要不断从一个有序数列中插入元素,取出最大值(或者最小值)时,通常会先将元素存放进有序数组,有序链表,查找树中,但这三种存储方式都有缺点有序数组插入值的时间复杂度为O(n),删除最值的时间复杂度为O(1)有序链表插入值时间复杂度为O(n),删除最值时间复杂度为O(1)查找树的插入值的时间复杂度为O(logn)(平衡二叉树树高)删除最值时间复杂度为O(logn),但随着不断删除元素,树也越来越倾斜,使得树高不再是logn,增大了时间复杂度。

2024-05-10 18:51:03 848

原创 LeetCode 543.二叉树的直径 C语言

看到这个题我的第一个反应是遍历二叉树中的每一个节点,求出来以该节点为根的树的直径,然后去其中直径最大的值返回就行这里的travel函数是对二叉树进行先序遍历每个节点求节点最大直径的至于最大直径的求法 就是左子树的深度加右子树的深度需要注意的是题目中给的直径的定义是树中任意两个节点之间最长路径的。这条路径可能经过也可能不经过根节点root。两节点之间路径的由它们之间边数表示。如上图 子树返回的深度恰好等于子树的最高的路径的边的数量加上根节点到子树的那一条边。

2024-04-27 12:08:55 439

原创 LeetCode 114.二叉树展开为链表 C语言

对二叉树进行先序遍历 将节点写入一个二叉树节点数组 最后将数组中的节点展开为右撇的二叉树先将数组申请一个大小为零的地址 将数组地址传入递归函数以便对数组所指的地址进行修改将num定义为全局变量便于在递归函数中进行数组下标的更新因为我们不知道树究竟有多少个节点 所以再每先序遍历一个节点时 都对数组所指向的地址realloc这样将遍历到的元素存入当前数组的最后一个位置 下标为 num - 1;函数跑完之后我们就得到了先序遍历的节点顺序 但树中节点之间的指向还没有改变。

2024-04-20 16:46:50 426

原创 LeetCode 226 翻转二叉树 C语言

我的思路是将二叉树遍历到最后 进行左右子节点的交换 最后将节点的值返回。

2024-04-20 15:52:31 224

原创 LeetCode 94.二叉树的中序遍历 C语言

二叉树的中序遍历可以用递归或者迭代方式实现。

2024-04-20 15:34:03 374

空空如也

空空如也

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

TA关注的人

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