C++
文章平均质量分 95
本专栏为自己学习C++过程中的笔记,以便复习,同时欢迎同行指导
郭源潮1
这个作者很懒,什么都没留下…
展开
-
【C++】map和set的介绍和使用
此篇主要对set和map、multiset和multimap做了简单的理解和相关应用的举例。关于其他的接口,由于和STL中vector、list、string等接口类似,这里没有做具体讲解,只做了特别的几个接口的说明。关于set和map更深层次的探索,请看下篇。原创 2024-09-26 21:50:15 · 1793 阅读 · 0 评论 -
【C++二叉树】二叉树的前序遍历、中序遍历、后序遍历递归与非递归实现
前序遍历、中序遍历、后序遍历的递归实现很简单,但是非递归迭代实现就有稍微有点难理解了。用了同一种思路,把树分为左路节点和左路节点的右子树,针对这三种遍历方式都适用。从根本上就是用循环模拟递归的过程。后序遍历相对前序和中序又稍微复杂,要考虑好访问节点的条件,避免死循环。多画图模拟迭代的过程更容易理解。原创 2024-09-21 19:25:16 · 1695 阅读 · 0 评论 -
【二叉树进阶】二叉搜索树
2. 二叉搜索树的实现1. 二叉搜索树概念二叉搜索树(BST,Binary Search Tree):可以是一颗空树,满足以下性质:根节点的值大于左子树上所有节点的值,小于右子树上所有节点的值。它的左子树和右子树也分别为二叉搜索树。它的中序遍历是有序的:0 1 2 3 4 5 6 7 8 9 ,所以也称为二叉排序树或二叉查找树。2. 二叉搜索树的实现。原创 2024-09-16 20:37:26 · 1408 阅读 · 0 评论 -
【C++】深究C++三大特性之多态
总结一下派生类的虚表生成:a.先将基类中的虚表内容拷贝一份到派生类虚表中 b.如果派生 类重写了基类中某个虚函数,用派生类自己的虚函数覆盖虚表中基类的虚函数 c.派生类自己新增加的虚函数按其在派生类中的声明次序增加到派生类虚表的最后。需要说明的是这个打印虚表的代码经常会崩溃,因为编译器有时对虚表的处理不干净,虚表最后面没有放nullptr,导致越界,这是编译器的问题。虚表存的是虚函数指针,不是虚函数,虚函数和普通函数一样的,都是存在代码段的,只是他的指针又存到了虚表中。如果是普通对象是一样快的。原创 2024-09-13 13:27:53 · 1149 阅读 · 0 评论 -
【C++】深究C++三大特性之继承
如果B要继承A,b就必须去调用父类A的构造函数完成父类成员部分的初始化,但是由于A的构造函数是private的,private成员无论以什么方式继承在子类中都是不可见的。但是我们看父类的拷贝构造,需要接收的是一个Person类的对象。同理,我们并没有实现子类的析构函数,编译器会生成默认的,这个默认的会调用父类的析构函数完成清理父类的成员,自己的成员调用这个默认的完成清理。上述代码,我们并没有写Student的拷贝构造,那么编译器就会生成默认的,这个默认的就会去调父类的拷贝构造去拷贝父类那部分的成员。原创 2024-08-28 09:00:00 · 1631 阅读 · 5 评论 -
【C++】模板深度剖析
此时,a1、a2都只能存放1000个元素,但是,如果我们想让a1存放100个元素,让a2存放1000个元素,应该怎样做?使用模板可以实现与类型无关的代码,但对于一些特殊类型可能会得到错误的结果,需要做特殊处理。1、模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生。这里比较整型a、b结果当然是没问题的,但是比较的是两个字符串结果就是错误的。编译时,Add函数和Add模板函数有声明,所以,编译过了,链接时,要去。对于正常类型去调用原模板,对于特殊类型,去调用特化之后的模板。原创 2024-08-25 17:42:48 · 1049 阅读 · 5 评论 -
【C++】stack和queue介绍使用及模拟实现(万字超详解)
虽然stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为容器适配器,这是因为stack和队列只是对其他容器的接口进行了包装。原创 2024-08-23 15:35:16 · 1312 阅读 · 1 评论 -
C++ string类的模拟实现 -> 浅拷贝与深拷贝
在面试中,面试官总喜欢让学生自己来模拟实现string类,最主要是实现string类的构造、拷贝构造、赋值运算符重载以及析构函数,所以我们实现几个简单的接口即可。大家看一下以下string类的实现是否有问题?原创 2024-07-25 13:44:58 · 1125 阅读 · 2 评论 -
C++ const成员
const成员函数承诺在函数体内不会修改任何成员变量,而非const成员函数在函数体内可以修改成员变量,这就存在了逻辑上的矛盾:一个承诺不会修改成员变量的函数内正在调用一个可能修改成员变量的函数,这将违反const成员函数的承诺,因为编译器无法确定非const成员函数是否会修改对象的状态。非const对象可以被修改,而const成员函数承诺不会修改对象的任何成员变量,非const对象调用const成员函数,实际上是以一个更受限制的方式(即不修改对象状态)来访问对象的共能。原创 2024-07-17 14:03:39 · 724 阅读 · 3 评论