C++
文章平均质量分 94
分享C++核心语法与知识总结
编程之路,妙趣横生
仰望星空,脚踏实地
展开
-
用红黑树封装出map与set
map与set的底层都是红黑树,所以本篇文章就分享如何用同一颗红黑树封装出map与set上述迭代器的实现很多与list模拟实现是一样的:关键的地方在于迭代器++与迭代器--如何实现,由于map/set的遍历是中序遍历,因此迭代器++的本质就是要找二叉树中序遍历过程中当前节点的下一个节点, 而中序遍历的顺序是: 左子树 根 右子树,原创 2024-05-15 19:49:17 · 696 阅读 · 0 评论 -
实现AVL树
注意:我们下面实现的AVL树,实现的是kv模型,也就是存储key值和对应的value值, 模拟map//三叉链//方便进行AVL树进行调平//存储键值对int _bf;//平衡因子(balance factor), _kv(kv),_bf(0){}原创 2024-04-14 22:12:42 · 645 阅读 · 0 评论 -
实现红黑树
/颜色定义成枚举类型enum ColorRED,BLACK//节点结构定义//三叉链//键值对//颜色变量Color _col;原创 2024-05-12 13:04:00 · 989 阅读 · 0 评论 -
搜索二叉树
也就是以要删除的节点为根节点,找左子树的最右节点(subRight)或者右子树的最左节点(subLeft),然后将要删除的节点值和subRight或subLeft的值进行交换,于是就转化成了删除只有1个孩子的节点的问题。这里重点体会参数root给引用的妙处,当最后的root是nullptr时,同时也是父节点的左指针或右指针的别名,所以root = new Node(key) 直接就把新开辟的节点和父节点链接起来了!由于删除后要保证仍然是搜索二叉树,因此我们使用。要删除的结点是叶子节点,没有左右孩子。原创 2024-04-10 10:59:06 · 1094 阅读 · 0 评论 -
set与map使用
前置学习内容:前面介绍STL容器的文章已经讲解了STL通用的很多接口,因此本篇博客仍然重点展示较为新颖的的接口与用法。原创 2024-04-14 15:44:56 · 801 阅读 · 0 评论 -
C++多态
子类对象拷贝给父类对象,会将子类对象中父类对象的那部分拿出来拷贝给子类对象,但不会拷贝虚表指针, 因为如果拷贝了虚表指针,父类对象中保存的虚函数表指针指向的就不是父类的虚函数表了,此时父类的指针/引用指向/引用父类对象,调用的就不是父类的虚函数了,就无法保证多态了~如上图所示,父类对象和子类对象中的虚函数指针是不同的,指向的也是两张不同的虚表,而BuyTicket()虚函数我们进行了重写,func()虚函数没有进行重写,因此两张表中BuyTicket()地址不同,而func()的地址是一样的!原创 2024-04-09 09:00:10 · 1062 阅读 · 0 评论 -
C++继承
1. 继承允许你根据基类的实现来定义派生类的实现。这种通过生成派生类的复用通常被称 为白箱复用(white-box reuse)。术语“白箱”是相对可视性而言:在继承方式中,基类的 内部细节对子类可见。继承一定程度破坏了基类的封装,基类的改变,对派生类有很 大的影响。派生类和基类间的依赖关系很强,耦合度高。2. 对象组合是类继承之外的另一种复用选择。新的更复杂的功能可以通过组装或组合对象 来获得。对象组合要求被组合的对象具有良好定义的接口。原创 2024-04-06 18:04:43 · 806 阅读 · 1 评论 -
stack 与 queue 与 priority_queue 与 仿函数 与 模板进阶
【优点】1.模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2.增强了代码的灵活性【缺陷】1.模板会导致代码膨胀问题,也会导致编译时间变长2.出现模板编译错误时,错误信息非常凌乱,不易定位错误。原创 2024-04-05 18:48:48 · 882 阅读 · 0 评论 -
list使用与模拟实现
/每个节点的类型T _data;:_data(x){}非const迭代器的实现之前讲解的string与vector的迭代器都是原生指针,而list的迭代器不是原生指针,主要原因是因为list的底层是双向链表,如果用原生指针++,是无法到下一个节点的;直接解引用拿到的也不是具体的数据,而是整个节点对象;而迭代器的访问与遍历方式都是类似的,都是++, 解引用,判断!=, 所以我们只需要把list的迭代器设计成类,在类中对原生指针做封装。原创 2024-04-02 23:46:06 · 1815 阅读 · 0 评论 -
vector模拟实现
vector是动态增长的顺序表,可以理解为动态数组;vector的用法与string基本类似,此处就不详细介绍了,具体用法可以参考网站:,本篇博客直接开始模拟实现!vector模拟实现与string不同的地方:1. 模拟实现string时采用成员变量是_str, _size, _capacity, 而STL原码实现vector采用的成员变量是 _start, _finish, _endofstorage, 本质是一样的!原创 2024-04-01 20:04:05 · 987 阅读 · 0 评论 -
【string】层层剖析string之模拟实现
通过上一篇博客的学习,我们已经对string相关接口设计和实现有了较为全面和深入的了解,本篇博客将深入讲解重要的一些接口底层是如何实现的,知其然更要知其所以然~原创 2023-08-17 08:59:44 · 468 阅读 · 6 评论 -
【string】基本用法
STL是C++标准库的重要组成部分;STL有六大组件,其中有一大组件叫做容器,我们今天要介绍的string就是容器之一1.string是表示字符串的字符串类2.该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作3.string在底层实际是: basic_string模板类的别名4.不能操作多字节或者变长字符的序列string接口文档string常用接口。原创 2023-08-15 16:41:19 · 6872 阅读 · 5 评论 -
【C++】内存管理与模板
① 申请与释放动态申请单个元素的空间class Apublic::_a(a){}private:int _a;int main()//只是开空间//创建1个A类型大小的空间//开空间+初始化A aa1;//A类型创建出了aa1对象//用aa1对象初始化申请的一个A类型大小的空间//匿名对象初始化申请的一个A类型大小的空间(用缺省值)//匿名对象初始化申请的一个A类型大小的空间(传实参)//1隐式类型转换成A类型的数据去初始化一个A类型大小空间//销毁动态内存空间。原创 2023-08-13 00:12:17 · 375 阅读 · 5 评论 -
【类和对象】收尾总结
int _y;int _y;//类外面进行初始化int main()a.Print();//1 1 2(3) static修饰的成员变量不能在声明时给缺省值。原创 2023-08-11 13:53:50 · 153 阅读 · 0 评论 -
【类和对象】六大默认成员函数
默认成员函数顾名思义, 用户如果没有实现,编译器会自动生成的函数就叫默认成员函数而当用户显式实现了,编译器就不会再自动生成了~一、构造函数作用:初始化对象,名字叫构造,但是并不是用来创建对象开空间的,而是用来初始化的~特点:1.函数名和类名相同2.不需要返回值(返回类型什么都不写)3.对象实例化时会自动调用构造函数4.构造函数可以重载(本质就是可以写多个构造函数,提供多种初始化方式)class Datepublic://构造函数_day = day;原创 2023-08-05 13:24:14 · 157 阅读 · 2 评论 -
【类和对象】日期类总结
1.有的函数后面加了const,有的没有加const,取决于函数内部是否需要改变日期类,+=,-=等操作都是要改变日期类本身的,而+ - 等操作是不改变的2.不需要在函数内部改变日期类的时候尽量都加const,否则很容易在调用时造成权限放大~3.非const成员可以调用const函数,const成员不能调用非const函数;非const函数内部可以调用const函数, const函数内部不能调用非const函数4.拷贝构造函数和赋值运算符重载函数本质是不一样的,都有存在的价值~原创 2023-08-06 11:31:28 · 293 阅读 · 1 评论 -
【类和对象】基础知识
class Datepublic://成员函数_day = day;private://成员变量int _year;int _month;int _day;Date.hclass Datepublic://成员函数private://成员变量int _year;int _month;int _day;总结:1.public表示公有成员,类外面可以访问;private表示私有成员,类外面不能访问。原创 2023-08-05 13:15:40 · 107 阅读 · 1 评论 -
C++入门
C++是兼容C语言的,因此C语言的所有语法在C++中都是可以使用的C语言是存在不少缺陷的,因此C++就对很多缺陷做了改进,产生了一些新的语法和机制rand本是库函数,但是我们不知道,定义了rand变量,导致了命名冲突命名空间本质就是划分界限,命名空间内部的成员外部是不能随意访问的命名空间 使用格式:关键字namespace + 命名空间名字(随便起)//具体成员那如果想访问命名空间内部的成员呢?--- 使用域作用限定符 ::使用方法:命名空间名字::成员。原创 2023-07-28 18:16:59 · 221 阅读 · 3 评论