Cpp_Study
文章平均质量分 91
xiao zhou
这个作者很懒,什么都没留下…
展开
-
LeetCode括号的分数(栈、树形结构、贡献率三种解法)
LeetCode856.括号的分数(三种解决方式)原创 2022-10-09 15:30:16 · 598 阅读 · 1 评论 -
C++智能指针讲解及模拟实现
C++智能指针详解及模拟实现原创 2022-08-05 13:36:51 · 1298 阅读 · 6 评论 -
C++基础语法(六)多态
C++基础语法(六)多态一、什么是多态1、静态的多态2、动态的多态二、构成多态的条件与实现1、多态的构成条件问题一:什么是虚函数问题二:什么是函数重写2、纯虚函数和抽象类纯虚函数的定义抽象类3、override和final关键字overridefinal4、实现继承和接口继承三、多态的底层原理1、虚函数表指针2、为啥必须使用基类指针或者引用才能构成多态3、关于虚表的一些扩展(1)虚函数表的“不正确”(2)何时初始化_vfptr?(3)如何理解重写 == 覆盖?(4)虚函数表存放在哪里?4、多继承中的虚函数表原创 2021-10-29 09:38:30 · 1299 阅读 · 8 评论 -
C++基础语法(五)继承——万字总结,干货满满
C++继承继承是什么、为什么会出现继承1、什么样的场景会使用继承2、什么是继承3、继承的语法继承方式1、访问限定修饰符的作用(1)修饰类中成员(2)修饰继承方式基类\派生类对象赋值兼容问题(切割问题)1、基类\派生类对象赋值兼容的基本概念2、其他类型的切割指针赋值引用赋值继承中的作用域隐藏\遮蔽遮蔽的概念及理解遮蔽与函数重载派生类的默认成员函数1、构造函数2、拷贝构造3、operator=( )4、析构函数多继承单继承与多继承的概念菱形继承菱形继承的坑虚继承终极问题:C++如何通过虚继承解决数据冗余以及二义原创 2021-10-11 17:33:55 · 2740 阅读 · 6 评论 -
初识“回溯算法”讲解及LeetCode对应例题解析
初识“回溯算法”及LeetCode例题解析回溯算法1、回溯算法的概念2、回溯算法的一般解题思路3、解决问题的方法例题一:二叉树中和为某一值的路径(1)题目描述(2)题目分析(3)代码实现例题二:电话号码的字母组合(1)题目描述(2)题目分析(3)代码实现回溯算法1、回溯算法的概念xxxx回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。xxxx上述文字有些抽象,如果将其具化来说。回溯法思路的具体描述是:把问题的解空间转原创 2021-09-21 19:13:25 · 1214 阅读 · 9 评论 -
LeetCode二叉搜索树的后序遍历序列
LeetCode二叉搜索树的后序遍历序列题目描述题目分析搜索二叉树1、定义2、性质题目分析(续)代码实现总结题目描述题目分析xxxx这道题的关键字是“搜索二叉树”、“后序遍历”。后序遍历大家应该都十分熟悉了,不熟悉的可以看我之前的博客二叉树的常见操作,但是搜索二叉树,估计大部分读者都不甚了解,所以我先把搜索二叉树的基本性质讲解一下。搜索二叉树1、定义二叉搜索树是满足以下性质的二叉树。1.非空左子树的所有结点的值小于其根结点的值;2.非空右子树的所有值大于其根结点的值;3.左右子树都是搜索原创 2021-09-20 21:11:47 · 800 阅读 · 8 评论 -
C++priority_queue模拟实现与仿函数讲解
C++priority_queue模拟实现1、priority_queue介绍(1)priority_queue的使用模拟实现仿函数 \ 函数对象何为仿函数?less的介绍仿函数与函数指针的比较其他函数对象补充priority_queue的实现1、priority_queue介绍xxxx先来一个大爆炸!!xxxx不要慌,我们慢慢解读,priority_queue(优先级队列),这确实是我们没有听说过的,不是我们在数据结构中讲过的。但是,我们注意到图中的一句话This context is simil原创 2021-09-18 18:28:40 · 774 阅读 · 12 评论 -
LeetCode重建二叉树详解
LeetCode重建二叉树详解题目描述原理分析(1)大致思路(2)细节阐述代码实现(1)主函数(2)递归函数参数区间的决定递归结束的条件总结题目描述原理分析(1)大致思路下面讲解一下,前序遍历+中序遍历如何确定一个唯一的二叉树。关于二叉树的基本知识,请看二叉树的基本操作及联系。对此就不再过多重复。对于前序遍历顺序:根、左子树、右子树;对于中序的遍历顺序:左子树、根、右子树。所以通过前序遍历,我们获取前序第一个结点就是这个树的根,再在中序遍历中找到该结点的位置。在中序中,根的左边全部的是属于根左子原创 2021-09-12 20:32:28 · 969 阅读 · 10 评论 -
C++stack与queue模拟实现
C++stack与queue模拟实现前言stack栈适配器stack的成员函数queue队列queue类总结前言xxxx无论是当初在学校最先学习C语言版的数据结构,还是现在学习STL,发现大家(包括我)都喜欢将stack(栈)和queue(队列)放在一起。可能是FILO和FIFO两种数据存储方式过于相近,更能深入人心,因此两者经常会被放在一起。但是STL我把他们放在一起更是有原因。因为这两种容器在模拟实现的时候,都会使用到“适配器”。这个在后面我再具体说明。stack栈xxxx栈的基本知识相信大原创 2021-09-11 19:53:28 · 1519 阅读 · 7 评论 -
C++基础语法(四)模板
模板引例何为模板1、函数模板2、类模板引例xxxx我们想要了解模板语法,我们要先举一个小“栗子”。那就是:请写出short、int、double三种类型的相加函数(Add)。short Add(short a, short b){ return a+b;}int Add(int a, int b){ return a+b;}double Add(double a, double b){ return a+b;}我们发现,对于不同的类型,我们就要写不同的函数,有几种类型就需要原创 2021-09-10 20:48:19 · 527 阅读 · 10 评论 -
LeetCode二叉树的层序遍历
二叉树的层序遍历题目描述题目分析二叉树的层序遍历题目描述题目分析xxxx这道题,题目是“二叉树的层序遍历”,首先我们提取一下题目和题目内容的关键词。“二叉树”、“层序遍历”、“每一层值分别”(可能不同的人看的着重点不完全相同,我注意到的是以上三个)。二叉树的层序遍历还是比较好搞的,根据数据结构的基础知识,只要我们借助一个队列,利用队列的“先进先出”的特性,就能够很好的进行层序遍历。为了避免部分读者暂时不会代码实现,影响后面的问题分析和代码阅读。所以我先讲解一下如何借助队列实现二叉树的层序遍历xxx原创 2021-09-07 09:18:44 · 564 阅读 · 7 评论 -
LeetCode只出现一次的数字i/ii/iii
LeetCode只出现一次的数字i/ii/iii只出现一次的数字i题目描述题目分析代码实现:只出现一次的数字ii题目描述题目分析代码实现只出现一次的数字iii题目描述题目分析代码实现总结只出现一次的数字i题目描述题目分析xxxx这道题第一次看的时候是完全没有思路的。想出来的方法效率太低。后来在网上看到解法是使用异或,但是一直不理解原理是什么。最近学校在学“计算机组成原理”,详细学异或后。突然对这个题有了透彻的理解。题目分析如下:首先来了解一下异或这个操作符异或(^):相同为0,相异为1操作数原创 2021-09-05 22:02:38 · 1700 阅读 · 10 评论 -
LeetCode最小栈问题的最优解法+代码实现
xxxx最近做了一道LeetCode中的一道题。最小栈,这道题其实是一个简单级别的题目,但是如果深究这道题,我觉得还是可以到达一个很深的层次。因为这道题如果想解决不算难,但是如果追求时间、空间上的极致,确实需要一定的思考与算法基础。题目描述xxxx简单来说,设计一个栈,除了基本的push、pop、top操作,还需要设计一个直接可以获取栈中元素最小值的接口。思路一(错误的)xxxx我估计大多数人都会像我一样,牺牲栈中第一个位置,或者创建一个成员变量,用来存储最小值。当push数据的时候就与这个最小值原创 2021-09-04 09:11:51 · 1167 阅读 · 5 评论 -
C++list类模拟实现
C++list类模拟实现list类的基本结构结点类成员变量成员函数迭代器类成员函数1、解引用运算符重载2、箭头运算符重载3、迭代器前置++4、迭代器后置++5、迭代器的比较链表类成员变量成员函数1、构造函数2、拷贝构造3、赋值重载4、析构函数5、clear6、begin()、end()7、insert8、erase其他小型接口list类的基本结构xxxxSTL中list是一个双向带头循环链表。除了头结点不存储有效信息外,其余node结点存储有效信息。同时,为了防止代码冗余,对于存储信息类型不同的问题,原创 2021-09-01 15:07:16 · 938 阅读 · 2 评论 -
迭代器失效(附案例详解)
迭代器失效问题迭代器指向内容意义改变总结“野指针”类型的迭代器失效总结两种迭代器失效合在一起的例子解决方案本文将使用具体案例来详细解读迭代器失效的各种原因迭代器指向内容意义改变下面我们看一段代码int main(){ vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4); v.push_back(5); //查找3迭代器的位置 vector<int>::it原创 2021-08-29 20:17:42 · 1182 阅读 · 6 评论 -
C++string类的模拟实现
string类的模拟实现一、string类的成员变量二、四大默认成员函数的实现(1)构造函数(2)拷贝构造函数(3)析构函数(4)赋值运算符重载三、string类中辅助功能实现(1)reserve(2)resize(3)size(4)clear(5)empty四、string的增删查改(1)push_back(2)append(3)operator+=(4)insert(5)erase(6)pop_back五、string的遍历(1)重载operator[ ] 的遍历方式(2)使用迭代器的遍历方式4(3)使原创 2021-07-22 18:23:44 · 1384 阅读 · 8 评论 -
默认成员函数详解
C++默认成员函数详解一、构造函数1.作用2.函数样式3.使用特点4.注意事项二、析构函数1.作用2.函数样式3.使用特点4.注意事项三、拷贝构造函数1.作用2.函数样式3.使用特点4.注意事项四、复制运算符重载1.作用2.函数样式3.使用特点4.注意事项总结####c++作为面向对象的编程语言,与c语言相比最大的一个特点就是类的使用,使数据与方法打包(变量与函数打包)在类中。而类中很重要的就是默认成员函数,默认成员函数是帮助我们更好处理对象与内存的一种方式,所以我们有必要充分的理解认识它们,这样才能使我原创 2021-07-21 17:46:52 · 795 阅读 · 7 评论 -
C++基础 语法(二)函数重载与缺省参数
C++基础语法(二)函数重载介绍函数重载概念函数重载常见的具体举例为什么C++可以函数重载而C语言不行(函数重载的底层解释)C语言:C++语言:函数名修饰缺省函数缺省函数的概念函数重载介绍函数重载概念函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明多个功能相似的同名函数。但是要求这些同名函数的形参列表(参数个数、类型或参数顺序)必须互相不同。jwoof注:重载函数只与形参列表有关,而与函数返回类型无关!函数重载常见的具体举例由于这函数重载这部分举例能更好说明函数重载的用法与作用,所原创 2021-05-21 18:42:39 · 914 阅读 · 10 评论 -
C++基础语法(一)C++命名空间详解
码字不易,养成习惯,先赞后看C++基础语法(一)命名空间命名空间介绍如何定义命名空间?如何使用命名空间中的变量标准库及如何使用标准库中的内容注意事项及补充命名空间命名空间介绍命名空间是C++为了解决C语言中命名冲突的缺陷而设计出来的一种语法。大致就是将变量名定义在一定的空间中,在使用时指定变量所在的域,帮助编译器明确地识别变量。借助这种特性,就可以在不同地命名空间中定义名字相同但是作用不同的变量。其次,C++还将库函数分装在自己的标准库中,所以我们也可以使用库函数的名字来定义适合的变量。我们所需要做原创 2021-05-18 15:59:18 · 719 阅读 · 16 评论