
C++
文章平均质量分 75
又秃又弱
博客主要记录和分享本人学习,请斟酌帖子,勿一味的输入知识
展开
-
八股 | static在C和C++中的用法
此时其他文件不可用,只对当前的源程序有效,而且不可用extern函数调用static。使其变成静态存储方式,由栈区->静态区。包含C内的三种用法以及下面两种。原创 2023-04-21 16:47:35 · 234 阅读 · 0 评论 -
C++八股 | 函数重写(覆盖)
函数重载、重写(覆盖)、隐藏的区别?重载重写(覆盖)隐藏类个数无要求 基类、子类(至少两个类) 基类、子类(至少两个类)参数情况同名不同参构成重载(与返回值无关) 同名同参 1.同名不同参2.同名同参+基类无virtual函数基类中有无virtual无要求 基类必须有 同上原创 2023-04-21 11:08:02 · 436 阅读 · 0 评论 -
友元friend是什么?三种实现方式为?
函数内部,函数前面加上 friend如下所示就是把函数Add()作为类A的友元。原创 2022-08-12 10:54:32 · 367 阅读 · 0 评论 -
AVL平衡二叉树是什么?如何用C++代码实现
平衡二叉树(AVL树)特点:左子树和右子树都是平衡二叉树,且左右子树的深度差绝对值不超过1。平衡因子BF:定义为该节点的左子树深度减去它的右子树深度。则平衡二叉树上的所有结点的平衡因子只可能是-1,0,1.只要二叉树上有一个结点的平衡因子的绝对值大于1,那么该二叉树就是不平衡的。举例:下图1不是BST树,59>58下图2不是,58不满足左右子树高度差为1的条件下图3不是。原创 2023-04-06 20:39:16 · 283 阅读 · 0 评论 -
动态规划 | 力扣198.打家劫舍用C++实现
盗贼准备打家劫舍,已知有n个房屋,每个房屋中有数量不等的财宝,有一个盗贼希望从房屋中取果最甘4房屋中有报警器,同时从相邻的两个房屋中盗取财宝就会触发报警器,计算在不触发报警器的前提下多可获取多少财宝。例如: 5,2,6,3,1,7--->结果为18。原创 2023-04-03 19:55:33 · 289 阅读 · 0 评论 -
贪心 | 力扣376 C++实现摇摆序列
摇摆序列一个整数序列,如果两个相邻元素的差恰好正负(负正)交替出现,则该序列被称为摇摆序列。一个小于2个元素的序列直接为摇摆序列。例如:序列[1,7,4,9,2,5],相邻元素的差(6,-3,5,-7,3),该序列为摇摆序列。序列[1,4,7,2,5](3,3,-5,3),[1,7,4,5,5](6,-3,1,0)不是摇摆序列。给一个随机序列,求这个序列满足摇摆序列定义的最长子序列的长度。原创 2023-04-03 15:26:29 · 537 阅读 · 0 评论 -
力扣55.跳跃游戏Ⅱ
跳跃游戏一个数组存储了非负整形数据,数组中的第i个元素nums[i],代表了可以从数组第i个位置最多向前跳跃nums[i]步,已知数组各元素的情况下,求是否可以从数组的第0个位置跳跃到数组的最后一个元素的位置?例如:nums=[2,3,1,1,4],可以从nums[0]=2跳跃至nums[4]=4nums = [3,2,1,0,4],不可以从nums[0]=3跳跃至nums[4]=4。原创 2023-04-03 14:54:43 · 272 阅读 · 0 评论 -
贪心算法 | 473火柴拼正方形 怎么用C++实现摆放火柴棍?
已知一个数组,保存了n个(n原创 2023-03-30 08:21:16 · 367 阅读 · 0 评论 -
递归 | 力扣22 括号生成 用C++实现对括号的组合
有n组括号,生成这n组括号所有的合法的组合对于某组括号,(())这种情况是合法的;)( 不合法例如:n = 3;结果:"((()))","(()())","()()()","(())()","()(())"原创 2023-03-27 20:11:02 · 248 阅读 · 0 评论 -
【递归】8皇后问题用代码解决
N皇后问题是计算机科学中最为经典的问题之一,该问题可追溯到1848年,由国际西洋棋棋手马克斯.贝瑟尔提出了8皇后问题。将N个皇后摆放在N*N的棋盘中,互相不可攻击,有多少种摆放方式,每种摆放方式具体是怎么?若在棋盘上已放置一个皇后,它实际上占据了哪些位置?以这个皇后为中心,上,下,左,右,左上,左下,右上,右下,8个方向的位置全部被占据。原创 2023-03-16 21:07:03 · 687 阅读 · 4 评论 -
深度搜索和广度搜索是什么?代码怎么实现?
对下左图进行如右图的深度搜索:从顶点A开始遍历,接着遍历A的第一个邻接顶点继续从B开始遍历B的第一个邻接顶点C,接着从C始遍历C的第一个邻接顶点D...直到遍历到F,F的第一个临界顶点已经被遍历,则遍历F的下一个邻接顶点G,接着从G的第一个邻接顶点遍历。对下左图进行广度搜索: 从顶点A开始遍历,接着遍历A的第一个邻接顶点B继续从B开始遍历B的第一个邻接顶点C,接着从C开始遍历C的第一个邻接顶点D.直到遍历到F,F的第一个临界顶点已经被遍历,则遍历F的下一个邻接顶点G,接着从G的第一个邻接顶点遍历。原创 2023-02-07 19:38:55 · 2031 阅读 · 0 评论 -
【C++】STL标准模板库
泛型程序设计:所谓泛型程序设计就是编写不依赖于具体数据类型的程序。C++中,模板就是泛型程序设计的主要工具。泛型程序设计的主要思想是将算法从特定的数据结构中出来,使算法成为的、可以作用于的数据结构。这样就不必为每种容器都编写一套同样的算法,当容器类模板修改、扩充时也不必重写大量算法函数。这种的通用算法和各种通用容器结合,提高软件复用性。原创 2022-12-15 16:08:20 · 518 阅读 · 0 评论 -
【纯虚函数】设计一个形状类——矩形、圆形、三角形,分别计算三种当前图形的周长和面积
覆盖才能产生多态覆盖:必须有父子关系、至少两个类基类的指针或者引用基类指针/引用构造函数不能为虚函数现有对象,再有绑定,然后多态构造函数不能定义为虚函数析构函数构造函数和析构函数不被继承吗?基类指针pb指向子类对象AB~A析构只析构基类。析构不释放子类,那么怎么释放呢?内存泄漏产生不了动态联编,没有虚表,产生动态绑定:析构设置为虚的不同名,为什么产生多态?系统会变成一个名字基类写了虚,可以继承在子类内。原创 2022-11-28 13:31:14 · 2364 阅读 · 0 评论 -
面向对象的三大特质之多态 | 什么是多态?虚表的工作原理是什么?
多态是什么?多态即多种形态,多态表示不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行。多态的4种状态:重载多态、包含多态、参数多态、强制多态重载多态:函数重载与运算符重载包含多态:含有虚函数的多态参数多态:模板——类模板、函数模板强制多态:强制类型转化——static_cast,cost_cast...原创 2022-11-24 09:11:19 · 1329 阅读 · 0 评论 -
面向对象的三大特质之继承 | 继承的规则和顺序是什么?什么是隐藏规则?
一个类自动拥有了来自另外一个类的属性和方法,我们管这种属性叫做继承。所以,更严格的继承规则应该是:若在逻辑上B是A的“一种”,并且A的所有功能和属性对B而言都有意义,则允许B继承A的功能和属性组合:若在逻辑上A是B的“一部分”,则不允许B从A派生,而是要用A和其他东西组合出B。例如眼eye、鼻mose、口mouse、耳ear是头Head的一部分,所以类Head由类眼eye、鼻mose、口mouse、耳ear组合而成,不是派生而成。原创 2022-11-10 14:43:03 · 601 阅读 · 0 评论 -
static在C++中的使用 | 静态数据成员与静态成员函数
在对变量声明时,全局变量可以实现对象的共享,但是可以被任意修改,没有权限的修改会出现无章法的问题。而普通成员变量是本类某个对象独有的,在类作用域内发挥作用,不会被任意修改,相比于全局变量更加安全,可以在外部不能被使用,因此产生了。第一次遇到b进行初始化,每次在调用fn时都要对a进行初始化,而b在静态存储区开辟的空间没有消息,在循环内累加,直到程序运行完空间才释放。,非静态函数内pintf()有this指针,必须通过对象来调用,把地址传过来才知道是谁的,不然就乱了。虽然b的空间没有消失,但是b是。原创 2022-11-03 11:45:22 · 1905 阅读 · 0 评论 -
函数指针是什么?什么是右左法则?函数指针怎么使用?回调函数是什么?
首先在main函数中调用test函数,将2,9传给x,y,max为函数,函数名作为参数传递,因此把max函数传给test参数中定义的函数指针p,相当于p=max,p(x,y)=max(x,y)=max(2,9)=9。主函数内调用fn,传参100给p,fn返回值为指针,return min,即指针指向min,主函数内传参3和20,分别给fn返回的指针所指向的函数min,min(3.20)=3。而我们书写的时候,从右往左看。当形参为函数指针时,传参时可以是函数指针,也可以是函数名, 注意,原创 2022-10-29 12:23:11 · 793 阅读 · 0 评论 -
【C++】运算符重载
前“++”格式:返回类型 类名::operator++{...}后"++"格式:返回类型 类名::operator++(int){...}后置"++"中参数int仅用作区分,口诀:“int 和引用不见面”++i 引用返回i++ 值返回"赋值="代码。。。。注意:当指针作为数据成员时,赋值运算符重载也要写出来,让两个不同的对象指针分别指向内存单元内,但内容要保持相同。原创 2022-11-01 08:21:27 · 459 阅读 · 0 评论 -
【C++】STL标准模板库<>
如下所示为类模板定义的语法,其中template为模板关键字,模板参数表的类型为参数化类型,也称为可变类型,类名为class,模板参数表的类型可包含普通类型,普通类型的参数可用来为类的成员提供初值。类模板中的成员函数可以是普通函数,也可以是函数模板。template class 类名{成员名;};模板类的成员函数还可以在类外定义,其语法如下,其中模板参数表与类模板参数表相同。模板参数名列出的是模板参数表中的参数名,顺序和模板参数表中顺序一致。template原创 2022-10-22 12:46:41 · 422 阅读 · 0 评论 -
【C++】常成员函数
【代码】【C++】常成员函数。原创 2022-10-21 17:55:18 · 360 阅读 · 0 评论 -
【C++]参数的缺省值
有一些参数的值在每次调用时都相同,书写这样的语句会使人厌烦。C++语言采用的缺省值使书写变得整洁(在编译时,缺省值由编译器自动插入)原创 2022-10-21 10:59:02 · 1488 阅读 · 0 评论 -
【C++】什么是函数重载?为什么需要?怎么实现?
相对于C语言的函数,C++增加了重载(overloaded)、内联(inline)、const、vertual四种机制。其中重载和内联机制,既可用于全局函数也可以用于类的成员函数,const和virtual机制仅用于类的成员函数。在c++程序中,而可以将语义、功能相似的几个函数用同一个名字表示,即函数重载函数名相同(同一个作用域),参数列表不一样。(同名不同参)注意:并不是两个函数名字相同就能构成重载。全局函数和类的成员函数同名不算重载,因为函数的作用域不同。原创 2022-10-21 10:17:48 · 1399 阅读 · 0 评论 -
【C++】拷贝/复制构造函数
指针作为参数类型时,实参传递时传的是值,形参s直接作为指针,直接指向实参a的空间即可,不需要对其开辟空间,也就不会产生递归调用。调用时发现,值类型不行,因为在将a复制给b,调用拷贝构造函数A(),在实参a对形参s传递时,实参a需要对形参s进行初始化,就还需要调用拷贝构。(解释一下这个为什么没有输出,因为现在编译器都优化了,实际是调用了,但随着编译器逐渐高级,编译器对其优化,没有必要再执行拷贝这一步)”,最后,主函数内变量作用域消失,根据析构函数的顺序,先构造的后析构,依次是c,b,a,原创 2022-10-16 12:06:20 · 618 阅读 · 0 评论 -
【C++】析构函数
在开辟空间时,需要构造函数来开辟空间,对应,作用域退出时也需要一个函数做“收尾”的工作,与构造函数对应——析构函数析构函数和构造函数作用相反,用于释放对象的内存空间如果程序员未写构造函数,那么系统也会提供一个默认的构造函数,同样,如果程序员未写析构函数,那么系统也会提供一个默认的析构函数,在当前对象退出时,自动调用,进行释放空间。原创 2022-10-16 11:42:36 · 4109 阅读 · 2 评论 -
【C++】new与delete
malloc()为指针开辟空间,但是malloc只是开辟了空间,但未给其合法值,没有调用构造函数,此时如果p->print(),用p去调用输出函数,结果会是随机值,相对于free(p),只是释放一块空间,但并没有析构对象。//释放一个数组,中括号写在delete和数组名p之间,强调删除的是数组。new和delete可以调用构造和析构函数,malloc和free只能开辟和释放空间。delete和new开辟的空间相对应,new一个数组就要delete一个数组。//new了一个字符型的空间。原创 2022-10-16 11:25:14 · 615 阅读 · 0 评论 -
【引用返回与值返回】私有数据成员在外部如何进行修改
没有确定的内存单元,不能放在赋值号左边,只能作为右值,而。在public内写getI(),获得m_i,主函数内调用。好处是返回时本身且不可被修改,仅是引用时才有意义。问:为什么需要返回引用,不能返回值呢?问:如何优化代码,使返回值不可被修改?,不是临时变量,可以作为左值被修改。答:返回如下const的引用类型。原创 2022-10-16 09:21:17 · 455 阅读 · 0 评论 -
静态与动态变量
静态存储器内开辟,在第一次遇到该变量时开辟空间,以后不会再开辟。静态变量(就比如公交车卡没办法在地铁上使用,都有自己的作用域)问: main()之前是否可以执行一段代码,如果可以请举例。只要进入fn,B的都要消失重新开辟。引用也只能在声明的时候初始化。静态变量在堆内开辟空间,A是静态,B是非静态。原创 2022-10-02 11:05:15 · 168 阅读 · 0 评论 -
【C++】构造函数与类的组合以及初始化
构造函数构造函数出现原因举例桌子类Table,属性为长宽高,一个输出函数printf,一个设置函数set,在主函数内定义桌子类的对象t,输出该对象的属性,又定义了桌子属性类的对象t1,设置高为60,输出该对象的属性,如下代码所示:原创 2022-09-29 22:17:35 · 1971 阅读 · 2 评论 -
【c++】内联函数inline
这是一个问题,对于C++而言,使用宏定义还有一个缺点就是:无法操作类的私有数据成员。因此引入“内联函数”,在C++程序中,应该用内联函数取代所有宏代码,而且内联函数可以对类型安全检查或者自动类型转换。原创 2022-09-25 12:28:10 · 611 阅读 · 0 评论 -
【C++】什么是类?集合体和类的区别是?
对象是 面向对象 技术的核心所在,面向对象技术中的对象就是现实世界中,某个 物理实体在计算机世界(逻辑)中的映射和体现。也就是说计算机中的对象,是模拟现实世界的实体。对象是现实世界的模拟实体对象是类的实例化类是对主观世界、抽象类别的设计先有实体 再有概念实体 再是类型类是一组相关的属性(变量)和行为 (方法)的集合。类是由一个抽象概念设计的产物对象,是由一个类型实例化后的具体表现形式。原创 2022-09-25 12:09:30 · 794 阅读 · 0 评论 -
【C++】基础知识
C:面向过程的思想,侧重于学习编程思想(函数设计)。C++:面向对象的设计(不存,有源破坏了封装性),面向对象的思想(类的设计)。C++兼容C语言#include //预处理(预编译)命令,std in/out 标准输入输出流。< > :库内头文件" " :自己写的istream类:输入流类ostream类:输出流类cout 是ostream类的对象,不是函数,是输出流的对象endl 结束并换行//输出a。原创 2022-09-22 11:27:00 · 335 阅读 · 0 评论