c++
文章平均质量分 88
c++学习笔记
#小多子
这个作者很懒,什么都没留下…
展开
-
【c++】map和set的封装
我们使用上节课的红黑树源码来封装map和set.因为map存的是(key,value),set存的是(key),为了我们set和map使用同一个类模板(红黑树),所以我们先要修改红黑树结点中存的数据类型,我们使用模板来初始化,根据实列化来决定结点中存的是pair,还是只有一个数据:代码中所有key的地方用data代替,而data的数据类型是T,当是set实列化的时候T就是int(一种),当是map的时候T就是pair,比方说pair原创 2024-05-16 09:06:32 · 382 阅读 · 0 评论 -
【c++】红黑树
_parent(nullptr)//节点的双亲(红黑树需要旋转,为了实现简单给出该字段), _col(RED) // 节点的颜色{}思考:在节点的定义中,为什么要将节点的默认颜色给成红色的?这是因为方便新插入的节点的颜色那我们新插入的结点应该选择插入红色还是黑色呢??对于这个问题,如果插入的黑色节点,会打破哪个规则,如果插入的是红色节点又会打破哪个规则?如果插入黑色节点,需要打破规则4,要检查每个路径很难。原创 2024-05-12 13:14:05 · 795 阅读 · 0 评论 -
【c++】avl树
一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:它的左右子树都是AVL树(简称平衡因子)的绝对值不超过1(-1/0/1)如果一棵二叉搜索树是高度平衡的,它就是AVL树。如果它有n个结点,其高度可保持在Olog2n,搜索时间复杂度O(log2n当插入,高度差不符合要求时,通过旋转变成avl树avl树节点定义需要操作一个树,我们只需要知道该树的根节点即可所以我们avl树的类成员变量为根节点地址。原创 2024-05-11 09:43:00 · 799 阅读 · 1 评论 -
【c++】set|map
1.set在底层是用二叉搜索树(红黑树)实现的。2.与map/multimap不同,map/multimap中存储的是真正的键值对,set中只放value,但在底层实际存放的是由构成的键值对。3.set中插入元素时,只需要插入value即可,不需要构造键值对。4.set中的元素不可以重复(因此可以使用set进行去重)。5使用set的迭代器遍历set中的元素,可以得到有序序列log2nlog_2 nlog2n。原创 2024-04-27 12:17:12 · 755 阅读 · 0 评论 -
【c++】继承
下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。原创 2024-04-14 19:01:05 · 1246 阅读 · 0 评论 -
【c++】多态
虚函数表// 这里常考一道笔试题:sizeof(Base)是多少?int main()为什么是8呢?虚函数表的继承class Basepublic:private:int _b = 1;Derive d;return 0;原创 2024-04-20 15:01:35 · 1067 阅读 · 0 评论 -
【c++】模板进阶
定义一个数组类1000我们需要两个对象,分别数组大小为10,和1000的话,只用上面一个类是不够的,两个类给不同的N值.这里我们可以用非类型模板参数来解决这个问题,只需要一个类。在这之前有一个知识点1000size(1);//这里故意写错,但是在实例化st1,它只对要用的函数实例化,并不会检查其他类成员函数内部有没有错误。在operator[]中,size(1);//这里故意写错,就不会报错。而编译器只会对大体的结构进行检查,比如说哪个类成员函数少一个分号。原创 2024-04-11 22:49:55 · 1061 阅读 · 0 评论 -
【c++】优先级队列|反向迭代器(vector|list)
int _month;int _day;while (!st.pop();如果我们把地址放进优先级队列里面呢??while (!st.pop();这里为什么排序是无序的呢??原创 2024-04-09 17:06:46 · 518 阅读 · 0 评论 -
【c++】二叉搜索树
二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树二叉树的中序遍历就相当于从小往大排序。原创 2024-04-08 22:57:57 · 1071 阅读 · 0 评论 -
【c++】string模拟实现
这里的迭代器直接使用原生指针来封装。_str为指向string数组的首地址的指针。_size为string数组的大小。_capacity为string数组的容量。原创 2024-03-09 17:51:04 · 1186 阅读 · 0 评论 -
【c++】list模拟实现
测试头插。原创 2024-03-03 16:37:23 · 904 阅读 · 0 评论 -
【c++】vector
其实我们可以通过earse返回下一个位置,就可以解决这里的问题辣为什么string里面有迭代器失效吗??vector一般用的是原生迭代器,而string和list是别的方式,很少会出现迭代器失效。原创 2024-02-22 18:39:44 · 393 阅读 · 0 评论 -
【c++】vector的增删查改
为了防止和库里面发生冲突,定义一个命名空间,将类对象放在命名空间 里面2.定义变量,需要一个迭代器,为了便于修改,变成任意类型的迭代器,我们使用函数模版,三个迭代器变量 _start用于指向顺序表的头,_finish指向顺序表的结尾的下一位,_end_of_storage保存总容量,在初始化列表中先设置为空3.定义函数4.reserve函数开空间5.push_back函数尾插,以及尾删函数6.测试尾插,尾删,下标遍历,迭代器遍历,范围for遍历,以及运算符重载返回对应下标的元素这里开原创 2024-02-16 14:46:04 · 1597 阅读 · 0 评论 -
【c++】类和对象3
拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。先定义一个类使用拷贝构造函数将d1的值拷给d2.为了更好的理解,我们可以先定义两个函数在调试过程中我们发现调用func1的时候,他会调用类的拷贝构造函数,如果调用func2函数的话,我们发现他不会去调用拷贝构造函数,而C++规定自定义的类型都会调用拷贝构造这里有两个问题?1.为什么构造拷贝函数要用传引用?原创 2024-01-30 17:27:51 · 870 阅读 · 0 评论 -
【c++】类和对象2
如果一个类中什么成员都没有,简称为空类。空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。原创 2024-01-27 15:56:21 · 871 阅读 · 0 评论 -
【c++】string
这里我们就要观察string类是怎么给扩容的了.看下面这块代码解释。原创 2024-01-22 11:23:24 · 909 阅读 · 0 评论 -
【c++】类和对象1
1.上面的那种方法,定义和声明都在类里面2.定义和声明分开stack.cppreturn;_top = 0;// 扩容++_top;_top = 0;int* _a;int _top;源.cppint main()stack st;st.init(4);st.Push(1);st.Push(2);st.Push(3);原创 2024-01-12 20:04:55 · 1219 阅读 · 0 评论 -
【c++】入门4
inline不建议声明和定义分离,分离会导致链接错误。因为inline被展开,就没有函数地址了,链接就会找不到。原创 2024-01-12 20:04:40 · 455 阅读 · 3 评论 -
【c++】入门3
1.swap交换两个变量值的时候可以用引用2.例题中通过前序遍历数组构建二叉树,可以用引用传别名.i变量是在main函数栈帧中创建的,在调用BinaryTreeCreate(arr,&i);完不会被销毁,可以用引用.原创 2024-01-05 19:40:50 · 1002 阅读 · 7 评论 -
【c++】入门2
函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。c++区分重载函数是根据参数的不同,个数的不同,类型的不同,顺序的不同。原创 2023-12-25 18:33:37 · 273 阅读 · 3 评论 -
【c++】入门1
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。int p1;int p1;原创 2023-12-24 11:28:24 · 347 阅读 · 4 评论