![](https://img-blog.csdnimg.cn/direct/0e26b9881e894284ac8c714cea95d4b7.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++
文章平均质量分 90
在编程的广袤世界中,C++以其强大的功能、丰富的特性和广泛的应用领域而备受瞩目。作为一名热爱编程的学习者,我深感C++的魅力与挑战,因此我决定开设这个专栏,用来记录我学习C++过程中的笔记心得,与广大编程爱好者共同分享和进步。
白菜欣
一脚临门编程界,此生代码为伴行,愿结识大佬们,求赐教,文章如若有错,请指正,我定虚心纠正
展开
-
【C++】全面解剖搜索二叉树(一整个拿捏住)
本篇归属于C++专栏,具体讲解什么是二叉搜索树(搜索二叉树),如何简单实现它?原创 2024-06-10 21:25:27 · 657 阅读 · 21 评论 -
【C++】多态:编程中的“一人千面”艺术
构成多态还有两个条件:① 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写② 必须通过基类的指针或者引用调用虚函数虚函数:即被virtual修饰的类成员函数称为虚函数public://被virtual修饰的函数叫虚函数cout << "Person->全价" << endl;在虚函数的后面写上 =0 ,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生类才能实例化出对象。原创 2024-05-27 20:32:13 · 1150 阅读 · 15 评论 -
【C++】继承(三):破解C++菱形继承之谜:为什么我们需要虚拟继承?
很多人说C++语法复杂,其实多继承就是一个体现。有了多继承,就存在菱形继承,有了菱形继承就有菱形虚拟继承,底层实现就很复杂。所以一般不建议设计出多继承,一定不要设计出菱形继承。否则在复杂度及性能上都有问题。多继承可以认为是C++的缺陷之一,很多后来的OO语言都没有多继承,如Java继承和组合先来讲一下什么是组合?举个例子:public:private:Person _p;int _age;这就是组合,他和继承很像,都可以使用到Person里面的成员,但是。原创 2024-05-21 20:25:44 · 873 阅读 · 10 评论 -
【C++】继承(二)深入理解继承:派生类默认成员函数与友元、静态成员的奥秘
我们在上一章讲解了:原创 2024-05-20 20:16:46 · 1072 阅读 · 2 评论 -
【C++】继承(一)继承三部曲:概念、转换、作用域一网打尽
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。简单来说就是子类继承父类后,可以使用父类的成员或者函数(前提是访问权限足够,这个我们后面讲)父类(基类):父类是一个更一般、更抽象的类,它定义了一组属性和方法,这些属性和方法会被其子类所继承。原创 2024-05-18 21:27:46 · 720 阅读 · 8 评论 -
【C++】浅谈一下C++中的模板
一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。如果有的小伙伴不知道什么是编译和链接,可看这篇关于编译和链接的详细介绍链接:编译和链接【优点】模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生增强了代码的灵活性【缺陷】模板会导致代码膨胀问题,也会导致编译时间变长出现模板编译错误时,错误信息非常凌乱,不易定位错误。原创 2024-05-17 10:50:06 · 636 阅读 · 8 评论 -
【C++】priority_queues(优先级队列)和反向迭代器适配器的实现
priority_queue他是一种容器适配器,但其实他底层和堆差不多,接口和堆也非常像,功能也是,默认情况下是大堆,你也可以用仿函数把他改成小堆empty():检测容器是否为空size():返回容器中有效元素个数front():返回容器中第一个元素的引用push_back():在容器尾部插入元素pop_back():删除容器尾部元素。原创 2024-05-14 21:27:44 · 1005 阅读 · 2 评论 -
【C++】stack和queue
stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,只能从容器的一端进行数据的插入和删除stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:empty:判空操作back:获取尾部元素操作push_back:尾部插入元素操作。原创 2024-05-13 19:55:26 · 674 阅读 · 2 评论 -
【C++】list原理讲解及其实现
要模拟实现list,必须要熟悉list的底层结构以及其接口的含义,在上一篇我们仔细讲解了list的常见接口的使用及其含义,这篇我们就直接进入主题。原创 2024-05-12 20:10:13 · 449 阅读 · 16 评论 -
【C++】list的使用
resize的用法和vector里面是一样,当n<size时,就只保留前n个数据;当n>size时,从size位置开始到n,值都赋为val。本篇list的使用就讲解完毕了,有问题请评论哦,我会及时解答和更正本文章的错误,我们下篇来讲解一下list的底层原理。在pos位置插入迭代器区间first到last之间的数据。1、这里的参数是内存池,我们一般用默认的就行。链表提供了两种访问数据的形式,分别是。将两个升序的链表有序拼接在一起。2、用n个val构造一个链表。得到链表的有效数据个数。3、迭代器区间构造链表。原创 2024-05-11 21:15:24 · 596 阅读 · 6 评论 -
【C++】vector的底层原理讲解及其实现
其实上面的代码大体逻辑是没有什么问题的,问题就出在这个memcpy上,要知道memcpy底层实现是按字节一个一个拷贝过去的,虽然我们的vector是深拷贝,但是memcpy是浅拷贝,这样写针对内置类型是🆗的,但是针对自定义类型会存在指向同一块空间的问题,两次析构等问题,话不多说,我们看图解。这里我利用库里的函数来实现swap,只交换vector的三个指针更高效,赋值构造的参数是传值传参,会调用拷贝构造,将v2拷贝一份给v,然后之间调用swap函数,将v和。赋值构造:两个已经存在的对象,一个赋值给另一个。原创 2024-05-11 18:44:41 · 1241 阅读 · 3 评论 -
【C++】string底层的实现原理(简单详细)
本篇文章我将按照C++文档库中的模块顺序来实现和讲解其实现原理,我们只讲各板块中常用的目录。原创 2024-05-08 21:22:36 · 768 阅读 · 5 评论 -
【C++】C++内存管理
本篇主要讲解了C/C++中的栈区,堆区,静态区,常量区中各自通常存放什么类型的数据,以及讲解了C++中开辟动态内存的操作符new/delete和C中用malloc/calloc/realloc/free的开辟动态内存的区别原创 2024-05-01 20:23:34 · 906 阅读 · 6 评论 -
类的6个默认成员函数(上)--- 此篇讲前三个最重要的
本篇主要讲解了构造函数,析构函数,拷贝构造函数的概念和使用场景,以及容易混淆的地方原创 2024-03-10 13:30:21 · 664 阅读 · 1 评论 -
【C++】重温类和对象
主要讲到了构造函数中的初始化列表,还有explicit关键字,static成员,友元函数,友元类,内部类,还有拷贝对象时发生的一些优化原创 2024-03-27 20:09:26 · 309 阅读 · 0 评论 -
【C++】C++入门小知识
本篇入门知识主要讲了C++中的命名空间,缺省参数,函数重载,引用,内联函数还有nullptr原创 2024-04-28 19:20:18 · 643 阅读 · 4 评论