
C++ Study
文章平均质量分 90
阿赭ochre
这个作者很懒,什么都没留下…
展开
-
map和set的封装
map和set的底层都是用一棵红黑树来封装的,但是map和set节点里面存储的值不一样,map存储的是<key,pair<key,value>>,set存储的<key,key>,多存储一个key是因为查找节点的需要(查找节点一般是按照key去查找的),所以统一用data来表示map和set存储的数据,再在map和set内部定义一个仿函数,通过传参使用函数对象来获得data中具体的key值{}//set的keyoftreturn key;//map的keyofT二、红黑树的迭代器。原创 2024-09-02 23:36:17 · 1218 阅读 · 0 评论 -
红黑树的插入
RED,BLACK:_kv(kv),_col(RED){}红黑树的节点要默认给成红色,因为我们在插入一个新节点时该新节点必须为红节点。如果插入的是黑节点,那么该黑节点所在的路径上黑色节点的数量就会改变,但是红黑树必须保证每一跳路径上黑色节点的数量相同,插入黑节点会影响红黑树的所以路径。原创 2024-08-23 12:56:14 · 971 阅读 · 0 评论 -
AVL树的旋转
int _bf;原创 2024-08-23 11:29:26 · 817 阅读 · 0 评论 -
二叉搜索树
二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树。原创 2024-08-16 11:17:05 · 893 阅读 · 0 评论 -
多态
多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了 Person。Person对象买票全价,Student对象买票半价。多态的条件1.调用虚函数必须是基类的指针或者引用2.调用的函数必须是虚函数,并且派生类要对虚函数进行重写重载:必须在同一作用域,函数名相同,参数不同重写(覆盖):发生在基类和派生的作用域中,函数名、参数、返回值类型(协变例外)相同,必须为虚函数。原创 2024-08-16 10:32:50 · 900 阅读 · 0 评论 -
继承
访问限定符和继承方式是两个不同的概念,他们使用的关键字都一样,但他们在代码中定义的位置不一样。基类中的private成员无论以什么方式被继承都是不可见的。不可见就是说明基类的私有成员被继承到派生类中后,语法上限制在基类外和派生类里面都是不可访问的。如果希望一个成员变量在只能在基类和派生类中访问,那么在基类中可以使用protected来定义,可见保护成员的作用在继承中被真正体现了。原创 2024-08-11 23:33:25 · 994 阅读 · 0 评论 -
模板进阶
1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性。原创 2024-08-05 12:47:19 · 829 阅读 · 0 评论 -
反向迭代器
反向迭代器实质上就是用正向迭代器去封装实现的。反向迭代器的++就是正向迭代器的--,反向迭代器的--就是正向迭代器的++, 因此反向迭代器的实现可以借助正向迭代器,即:反向迭代器内部可以包含一个正向迭代器,对正向迭代器的接口进行包装即可。原创 2024-08-05 11:33:32 · 246 阅读 · 0 评论 -
priority_queue--仿函数
可以使用仿函数当参数为指针时,想要比较指针所指向的内容,可以自定义一个适用于指针类型比较的仿函数。后续模板参数的特化也能解决这一问题。原创 2024-08-05 11:20:36 · 674 阅读 · 0 评论 -
list模拟实现--用节点封装的迭代器问题
/节点T _val;,_val(x){}节点类就相当于c语言中的BuyNewNode()原创 2024-08-01 11:15:56 · 820 阅读 · 0 评论 -
vector使用和模拟实现
1.成员变量vector的成员变量使用三个指针,通过三个指针的位置来控制vector的大小和容量2.vector的三种构造函数C++11支持在成员变量声明的位置给缺省值,因此vecto构造函数r的初始化列表可以不显示写这里有一个需要注意的细节,在用n个int类型的val去构造时要使用int n而不是size_t n。原创 2024-07-27 13:26:26 · 1085 阅读 · 0 评论 -
string使用和模拟实现
在构造时,将资源的计数给成1,每增加一个对象使用该 资源,就给计数增加1,当某个对象被销毁时,先给该计数减1,然后再检查是否需要释放资源, 如果计数为1,说明该对象时资源的最后一个使用者,将该资源释放;如果对象中管理资源,最后就会导致 多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该 资源已经被释放,以为还有效,所以当继续对资源进项操作时,就会发生发生了访问违规。如果不自己显示写,那么编译器就会调用默认拷贝构造,进行逐个字节的浅拷贝。删除从pos位置开始的len个字符。原创 2024-07-26 12:15:59 · 836 阅读 · 0 评论 -
模板初阶
/stack 类public:_size = 0;_size++;i < _size;int _size;1.类模板不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误2.如果模版类里面的成员函数在类内声明,类外定义,在定义成员函数时要重新写一遍模板定义3.对于普通类,类名和类型是一样的;原创 2024-07-24 17:45:39 · 431 阅读 · 0 评论 -
C/C++动态内存管理
1.new的原理 :调用operator new函数申请空间在申请的空间上执行构造函数,完成对象的构造2.delete的原理:在空间上执行析构函数,完成对象中资源的清理工作调用operator delete函数释放对象的空间3.new T[]的原理:调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对象空间的申请在申请的空间上执行N次构造函数4.delete[]的原理。原创 2024-07-15 12:21:42 · 652 阅读 · 0 评论 -
类和对象(下)
return dd1;return ptr;private:D(){}把类的构造函数限定为私有就可以避免在类外通过其他方式创建函数。限定为私有后,想在类外创建函数,就可以使用静态成员函数来实现,因为静态成员函数通过类域和访问限定符就可以访问到。原创 2024-07-15 11:29:33 · 771 阅读 · 0 评论 -
类和对象(中)---六个默认成员函数
1. 拷⻉构造函数是构造函数的⼀个重载2. 拷⻉构造函数的参数只有⼀个且必须是类类型对象的引用,使⽤传值方式编译器直接报错,因为语法逻辑上会。原创 2024-07-11 21:50:51 · 1090 阅读 · 0 评论 -
类和对象(上)
1.class为类的关键字+类的名字+{},{}为类的主体,类的定义结束后必须加分号。类的内容包括:类中变量称为类的属性或类的成员变量,类中函数称为类的方法或类的成员函数2.为了区分成员变量,会在成员变量前面加上特殊标符,如_或m,这个C++没有强制要求,具体看使用需求3.C++中struct也可以定义类,并且C++兼容struct的用法,同时将struct升级为类,最明显的变化是struct中可以定义成员函数4.定义在类中的成员函数某认为内联函数。原创 2024-07-10 10:47:02 · 743 阅读 · 0 评论 -
C++入门
一、C++关键字(C98)C++总计有63个关键字二、命名空间在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称都将存在于全局作用域中,可能会导致很多冲突,比如展开头文件的时候,标准库包含的关键字可能会与我们所定义的类型、变量、函数产生重名冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题。2.1命名空间的定义定义命名空间,需要使用关键字namespace,后面跟上命名空间的名字,然后接原创 2024-07-07 15:00:06 · 938 阅读 · 0 评论