C++
文章平均质量分 75
Yfan133
luka,up up!
展开
-
【C++】知识体系框图
原创 2021-04-12 19:08:45 · 265 阅读 · 0 评论 -
【C++】开散列模拟哈希表
开散列(链地址法)原理:本质是链表集合(vector + list),将发生冲突的元素挂在同一个链表中。哈希表中没有直接存储元素,而存储的是链表首节点的地址映射关系:通过对元素 关键字(key) 取模数组容量,计算哈希地址哈希冲突:将产生冲突的节点挂载到同一链表中相较于闭散列:需要额外的指针域空间,但是不会影响别的节点查找和插入,整体插入、查找效率较高哈希节点(链表):// 哈希节点(单链表)template <class T>struct HashNode{ T原创 2021-04-05 16:52:14 · 249 阅读 · 0 评论 -
【C++】闭散列实现哈希表
文章目录哈希概念:闭散列(开放定址法):哈希概念:顺序结构以及平衡树中,查找一个元素需要时间复杂度为O(log2Nlog2Nlog2N),搜索效率较低理想搜索状态:不经过任何比较,通过某种函数使元素的存储位置和它的关键码之间建立一 一映射的关系,则查找通过该函数很快可以找到元素位置哈希表是一种以空间换时间的思想闭散列(开放定址法):底层使用数组存储元素映射关系:通过对元素 关键字(key) 取模数组容量,计算哈希地址哈希冲突:映射到的位置有不同 key 值元素线性探测:每次向后偏移原创 2021-03-25 22:09:00 · 180 阅读 · 0 评论 -
【C/C++】C和C++中Struct和Class区别
文章目录一、结构体1.1 C结构体和C++的结构体1.2 C结构体和C++的类1.3 结构体内存对齐二、位段1.1 什么是位段?1.2 位段在TCP/IP协议报头中的使用三、枚举四、联合一、结构体1.1 C结构体和C++的结构体1.2 C结构体和C++的类1.3 结构体内存对齐二、位段1.1 什么是位段?1.2 位段在TCP/IP协议报头中的使用三、枚举四、联合...原创 2021-01-11 20:15:47 · 467 阅读 · 0 评论 -
【C++】模板进阶,搞定泛型编程
文章目录一、模板的概念二、模板的特化三、类型萃取一、模板的概念模板概念:模板实现了通用类型的代码,不需要关心数据的类型,因此 C++标准模板库STL产生。模板可以分为:类模板和函数模板,其类型推导和具体代码生成都是在编译阶段。没有实例化的模板:编译器只是对模板进行简单的语法检测,并不会生成代码实例化之后:根据用户对模板实例化的类型来生成代码,并且对生成的代码进行语法检测模板类型的参数:类型模板参数:类型不确定的,实例化后才生成对应代码非类型模板参数:类型已经具体化如果有缺省或原创 2021-03-02 22:29:03 · 450 阅读 · 8 评论 -
【C++】list接口及模拟实现
文章目录vector 和 list 的区别vector 和 list 的区别相同点:都是STL提供的序列式容器,包含在 std 的命名空间中vectorlist底层结构动态类型的顺序表带头节点的双向循环链表随机访问支持,访问元素时间复杂度O(1)不支持,访问元素O(n)插入/删除效率任意位置插入删除元素效率低 (搬移数据)任意位置插入删除效率高迭代器原生态指针对原生态指针进行的封装迭代器失效插入/删除/扩容删除应用场景访问元素较原创 2021-02-22 10:55:25 · 102 阅读 · 0 评论 -
【C++】string类接口及模拟实现
目录string介绍string常用接口string模拟实现小标题4小标题51)string介绍C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。C++封装了这些接口和操作,创建出string类string是表示字符串的字符串类该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。不原创 2021-02-19 12:41:10 · 188 阅读 · 0 评论 -
【C/C++】AVL树的特点及模拟实现
文章目录AVL树的特点AVL插入后的四种场景代码实现AVL树的特点二叉搜索树可以使查找的效率提升到log2nlog_2nlog2n,但如果数据基本有序那么二叉搜索树会退化成单枝树,查找效率相当于在顺序表中搜索数据,效率低。两种平衡二叉搜索树解决了这个问题:AVL树和红黑树AVL树特点:每个节点的左右子树高度差的绝对值不超过1,即降低了树的高度,从而降低平均搜索时间空树也是AVL树,AVL树的每颗子树都是AVL树因此AVL树每进行一次插入删除操作都要保证树的平衡AVL插入后的四种场景原创 2021-02-08 12:23:56 · 315 阅读 · 0 评论 -
【C/C++】你不能错过的C/C++内存管理!
目录C/C++内存分布C++中动态内存管理小标题3小标题4小标题51)C/C++内存分布先来看一段代码:int globalVar = 1;static int staticGlobalVar = 1;void Test(){ static int staticVar = 1; int localVar = 1; int num1[10] = {1, 2, 3, 4}; char char2[] = "abcd"; char* pChar3 = "abcd"; in原创 2021-02-07 10:38:28 · 117 阅读 · 0 评论 -
【C/C++】详解C++三大特性之一:多态
文章目录一、多态的概念和定义1.1 多态的概念1.2 多态的构成条件二、虚函数的重写2.1 重写规则2.1 特殊的重写2.3 检测重写2.4 重载 vs 同名隐藏(重定义) vs 重写(覆盖)三、抽象类四、多态的原理五、虚函数表一、多态的概念和定义前提: 这篇文章是在 vs2019下的 x86 程序中,涉及的指针都是4字节,如果在其他平台下,可能需要考虑指针8字节的问题等等。1.1 多态的概念完成某个行为时,不同的对象会产生不同的状态。比如买票,小孩有半价票,成人有成人票,退伍军人会免票,这就是多原创 2021-01-06 18:30:08 · 651 阅读 · 4 评论 -
【C/C++】详解C++三大特性之一:继承
文章目录一、继承的概念和定义1.1 继承的概念:1.2 继承权限二、继承规则2.1 继承中的对象模型2.2 继承中的作用域2.3 派生类的默认成员函数三、多继承和菱形继承3.1 多继承对象模型3.2 菱形继承一、继承的概念和定义1.1 继承的概念:实现代码复用,实现多态的必要条件保持原有类特性的基础上进行扩展,增加新功能呈现了面向对象设计的层次结构继承之后:成员函数和成员变量都被继承了,sizeof(子类) = sizeof(父类) + 子类新增1.2 继承权限小结:基类 priv原创 2021-01-02 21:09:27 · 1905 阅读 · 4 评论 -
【C++】this指针,结构体和类的区别,不能错过!
C++类和对象(lesson 3)结构体和类类的空间大小this指针总结结构体和类类的空间大小this指针总结原创 2020-10-12 14:28:57 · 846 阅读 · 0 评论 -
【C++】函数重载和缺省参数的定义,详解C语言不支持重载原因
1.函数重载:int Add(int a,int b) //传参a,b都为int型时调用该函数{ return a + b;}int Add(int a, char b){ return a + b;}double Add(double a, double b) //传参a,b都为double型时调用该函数{ return a + b;}概念:函数名相同,参数列表(参数个数,参数类型,不同参数的次序)不同,则构成重载注意:如果两个函数仅是返回类型不同,则不能构成重载例原创 2020-09-16 23:06:26 · 439 阅读 · 0 评论 -
【C++】引用概念和使用
概念:引用(类型名& +引用变量名):给已存变量取一个别名,和原变量使用的同一内存空间(类似不带*的指针)void Func(){ int flag = 1; int& ra = flag; cout << flag << endl << ra;}注意事项:1)引用类型必须和引用实体类型一致 例:(int& ra=flag)flag必须是整型,否则系统报错2)定义时必须初始化 例:(int& r原创 2020-09-17 23:48:04 · 179 阅读 · 0 评论 -
【C++】内联函数,宏和const概念
先来看一段有趣的代码:int main(){ const int a = 10; int* pa = (int*)&a; //&a ---> const int* --->表明该地址指向的空间内容不允许被修改,必须强转(int*) *pa = 100; cout << a << ' ' << *pa << endl; return 0;}输出结果:10 100可以看到a的内容已经被修改成了100,为原创 2020-09-23 17:28:08 · 211 阅读 · 0 评论 -
【C++】auto关键字
C++语法糖auto关键字(lesson 4)auto概念使用场景注意事项原创 2020-09-24 23:48:52 · 292 阅读 · 0 评论 -
【C++】构造函数和析构函数,一看就会!
C++类和对象(lesson 2:构造函数和析构函数)原创 2020-10-13 19:12:37 · 171 阅读 · 0 评论 -
【C++】拷贝构造,运算符重载,const修饰的成员,不错!
C++类和对象(lesson 3:拷贝构造,运算符重载)拷贝构造函数运算符重载const成员总结1)拷贝构造函数2)运算符重载3)const成员4)总结原创 2020-10-20 08:54:35 · 355 阅读 · 0 评论 -
【Linux】彻底搞懂static成员和友元函数
彻底搞懂static成员和友元函数、类(lesson 4)static成员运算符重载的左右操作数友元总结1)static成员在C语言里static可以修饰变量和函数:函数: 改变函数的链接属性,表明该函数只能在当前文件中使用全局变量: 该变量具有文件作用域 局部变量: 该变量变为全局变量C++里static修饰成员变量之后:该变量变成类的属性下面看一段代码:如果想求程序中到底创建出了多少个类对象?class A{public: A() //构造函数 {原创 2020-10-27 11:56:27 · 277 阅读 · 0 评论 -
【C++】模板,泛型编程,STL简介
模板,泛型编程泛型编程函数模板类模板用模板实现顺序表STL简介1)泛型编程对于一个加法函数,要是参数类型不同,就必须把每种类型的函数都重载出来int Add(int left, int right) { return left + right;}double Add(double left, double right){ return left + right;}char Add(char left, char right){ return left + right原创 2020-11-04 20:27:01 · 232 阅读 · 0 评论 -
【C++】vector 用法以及实现,还不错!
主标题vector常用接口迭代器失效小标题3小标题4小标题51)vector常用接口 //vector构造方式 vector<int> ar; //无参 vector<int> ar1(5, 0); //有效元素5,用0填充 vector<int> ar2(ar1); //用a1拷贝构造 vector<int> ar3(ar1.begin(), ar1.end()); //迭代器构造,一般涉及迭代器的原创 2020-11-25 14:36:27 · 514 阅读 · 4 评论