
C++
文章平均质量分 92
邓富民
你要像欣赏花一样,欣赏你自己
展开
-
【C++特殊类的设计】
2.禁掉operator new 和 operator delete,防止被人在堆上创建对象。1.C++98实现方法:构造函数私有化,这样子类的构造中就无法调用到父类的构造,就无法被继承。1.将构造函数和拷贝构造私有化,防止被人调用拷贝构造在栈上创建对象。1.将构造函数私有化,提供一个静态成员函数接口返回即可。C++11中,有一个关键字final,表示该类不能被继承。2.提供一个静态成员函数,返回new的对象。2.懒汉模式实现单例(需注意线程安全)禁止该类的拷贝构造和赋值重载即可。1.饿汉模式实现单例。原创 2025-03-25 16:12:11 · 227 阅读 · 0 评论 -
【C++11】智能指针问题
本文讲述了几个智能指针的优缺点和模拟实现。原创 2024-06-14 20:45:24 · 949 阅读 · 0 评论 -
【C++11新特性】右值引用和移动语义(移动构造,移动赋值)
列表初始化是C++11的一个新特性,不同于初始化列表。列表初始化在对自定义类型时,会调用它的构造函数。int _x;int _y;// C++11中列表初始化也可以适用于new表达式中return 0;以前学习到的一般只有单个参数的构造函数支持隐式类型转换,现在的列表初始化实际上支持了多参数的构造函数支持隐式类型转换。原创 2023-10-17 20:43:57 · 322 阅读 · 2 评论 -
【C++】哈希表
这篇文章进入哈希表的学习,以及详细介绍如何用哈希表封装unordered_map和unordered_set。在红黑树的查找效率中,平均查找时间复杂度为O(logN)。但还是不够快,因为有大佬想出了更快的方法。即不像红黑树那样遍历树进行节点之间的比较,而是直接知道查找的数据在结构中的位置。怎么知道这个数据在不在呢?直接通过一个映射关系即可找到。如何实现映射关系?通过函数实现,而这个函数就是哈希函数。总结:哈希就是能让一个数据直接通过这个哈希函数直接查找是否在结构中,而不需要进行比较。原创 2023-10-11 17:38:02 · 574 阅读 · 23 评论 -
【C++】红黑树
本文着重讲解红黑树的原理和性质及其难点。以下是本篇文章正文内容红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或 Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。也就是说,红黑树任意一条节点的路径长度都不超过最短路径的2倍。RED,BLACKpublic:,_kv(kv),_col(RED){}重点是看u(叔叔)节点如果p是g的左的情况:情况1:变色。原创 2023-09-15 20:28:04 · 271 阅读 · 15 评论 -
【C++】AVL树
本文章将会模拟实现一棵AVL树。以下是本篇文章正文内容AVL树也是一个二叉搜索树,只不过是在二叉搜索树的基础上,增加了一个条件:任意一棵子树的左右高度差的绝对值不大于1。1)需要有一个平衡因子存在,即_bf2)_data值可以是一个键值对,也可以是其他类型,这里我选择了pair。3)在后面的其他操作中,会频繁用到一个节点的父亲,所以直接在节点中添加一个_parent成员。本文主要讲述了AVL树的插入过程及其效率分析。原创 2023-09-15 14:33:00 · 238 阅读 · 21 评论 -
【C++】模拟实现二叉搜索树的增删查改功能
本文章讲述了二叉搜索树的增删查改功能,其中有一些细节需要特别注意。原创 2023-09-08 21:52:00 · 688 阅读 · 9 评论 -
【C++】多态的实现及其底层原理
本文继C++继承之后讲解C++多态。单单从概念入手不好理解,应该深入理解多态的实现后再回过头来讲解。现在简单举个例子:我们在购买高铁票时,往往会有成人票全价,学生票半价的优惠,针对不同的人群给予不同的优惠,这个就是多态(多种形态)。被virtual关键字修饰的类成员函数就是虚函数。在继承中,子类要想重写父类,父类的成员函数必须是虚函数,而子类的成员函数可以不加virtual,但一般建议加上比较合适。原创 2023-07-30 21:38:15 · 1422 阅读 · 20 评论 -
【C++】从0到1讲继承|复杂的菱形继承
本文主要讲述的是继承的概念,以及基类和派生类和衍生出的各种东西,还有多继承,菱形继承等,从0到1讲解继承。与日常生活中的人的继承相关,你可以继承你父亲的财富,继承你父亲的房产等等。1.在子类继承父类中,子类的作用域和父类的作用域是独立的。2.如果子类和父类有同名成员变量,子类成员会将父类的同名成员变量隐藏起来,可以理解成父类的成员变量被揣进裤兜里了。// Student的_num和Person的_num构成隐藏关系,可以看出这样代码虽然能跑,但是非常容易混淆string _name = "小李子"原创 2023-07-25 22:06:22 · 1170 阅读 · 26 评论 -
【C++】STL使用仿函数控制优先级队列priority_queue
本文章讲解C++STL的容器适配器:priority_queue的实现,并实现仿函数控制priority_queue底层。本文章讲解了仿函数控制priority_queue容器的底层实现的过程以及priority_queue的底层实现。只要有堆的地方就可以使用priority_queue容器。原创 2023-07-22 21:31:25 · 1798 阅读 · 21 评论 -
【C++】STL之容器适配器——使用deque适配stack和queue
【C++】STL之容器适配器——使用deque适配stack和queue原创 2023-07-22 20:25:47 · 1773 阅读 · 20 评论 -
【C++】STL之list容器的模拟实现
c++STL之list容器的模拟实现。原创 2023-07-18 21:34:16 · 2944 阅读 · 12 评论 -
【C++STL】模拟实现vector容器
C++STL的vector容器常用接口的模拟实现原创 2023-07-16 16:56:30 · 2601 阅读 · 69 评论 -
【C++】string模拟实现
C++string类常用接口的模拟实现原创 2023-07-15 00:07:13 · 2625 阅读 · 29 评论 -
【C++】什么是函数模板/类模板?
一、函数模板1.什么是函数模板?2.函数模板格式3.函数模板原理4.函数模板实例化(1)隐式实例化(2)显示实例化二.类模板1.类模板定义格式2.类模板的实例化总结原创 2023-06-01 16:11:17 · 1520 阅读 · 56 评论 -
【C/C++的内存管理】
🍕1. C/C++内存分布1.1有关C/C++的一道题目🍕2. C语言中动态内存管理方式:malloc/calloc/realloc/free🍕3. C++内存管理方式3.1 new/delete操作内置类型3.2 new和delete操作自定义类型🍕4. operator new与operator delete函数(重点)🍕5. new和delete的实现原理(重点)5.1 内置类型5.2 自定义类型🍕6. 定位new表达式(placement-new) (了解)原创 2023-05-17 00:03:56 · 1308 阅读 · 36 评论 -
【类和对象(下)】
一、🍕再谈构造函数1.1构造函数体赋值1.2初始化列表1.3explicit关键字二、🍕static成员三、🍕友元四、🍕内部类五、🍕匿名对象六、🍕拷贝对象时编译器的一些优化七、🍕再谈类和对象🍕总结原创 2023-05-15 17:54:30 · 470 阅读 · 3 评论 -
如何实现一个完整的日期类?
本文教你完整实现一个日期类原创 2023-05-10 17:50:22 · 529 阅读 · 31 评论 -
【类和对象(中)】六大默认成员函数
本文继类和对象上,开始讲述默认成员函数。默认成员函数是:我们不具体写,编译器会自动生成的函数叫默认成员函数。原创 2023-05-09 22:43:15 · 882 阅读 · 24 评论 -
【类和对象】(上)
1.面向对象和面向过程的区别和联系 2.什么是类,类对象 3.类的定义,使用 4.this指针等等原创 2023-05-05 17:36:16 · 647 阅读 · 64 评论 -
C++ auto用法
auto能够自动识别变量类型。原创 2023-04-24 13:53:19 · 772 阅读 · 1 评论 -
【C++的内联函数】
用关键字inline修饰的函数叫做内联函数。C++编译器编译时会自动在被调用的地方展开。原创 2023-04-23 23:54:11 · 568 阅读 · 1 评论 -
【详解C++中的引用】
引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。原创 2023-04-19 16:41:17 · 4277 阅读 · 31 评论 -
【初识C++】(缺省参数和函数重载)
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型不同的问题。原创 2023-04-16 17:52:06 · 597 阅读 · 30 评论 -
【初识C++】(关键字,命名空间)
命名空间是对于全局变量来说,我们在定义变量或函数时,函数名可能会和库中的函数名产生冲突。比如:报错的意思是:库中存在rand这个函数,而我又定义一个rand这个变量,所以会产生名字的冲突。为了解决这个问题,C++引入了命名空间这个概念。而与该命名空间的关键字是:namespace命名空间搜索规则:局部域->全局域->命名空间域(如果不指定,不会主动去搜索)首先引入域的概念,学习c语言会知道,有一个域叫做作用域,比如局部作用域和全局作用域。来看下面的代码:我分别要输出局部作用域的a和全局作用域的a该原创 2023-04-16 10:05:48 · 437 阅读 · 18 评论