![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++语法/实现/相关
文章平均质量分 85
主要是在学习C++时的知识点, 相关语法的实现和总结
殇&璃
这个作者很懒,什么都没留下…
展开
-
C++特殊类的设计: 单例模式 (饿汉 + 懒汉)
单例模式是C++中很重要的一种设计模式, 这次我们就来聊聊单例模式的设计, 从饿汉和懒汉两种模式出发去实现单例模式,实现单例模式之前, 建议大家先看一看其他C++中的特殊类的设计, 有关后面的设计思想这里附上链接: C++特殊类的设计: 只能在堆/栈上创建对象, 不能被继承的类文章目录单例模式饿汉模式懒汉模式线程安全单例模式很简单, 设计一个类, 只能创建一个对象就是单例模式饿汉模式饿汉模式: 保证程序启动前, 对象就存在要想使对象在程序启动前就存在, 我们可以用静态成员静态成员在.原创 2021-03-28 22:51:21 · 274 阅读 · 0 评论 -
C++特殊类的设计: 只能在堆/栈上创建对象, 不能被继承的类
我们可能有时候会被问到C++的一写特殊类, 只能在堆上创建对象, 只能在栈上创建对象, 或者不能被继承的类.那么怎么设计呢? 让我们一起来学习~文章目录只能在堆上创建对象的类只能在栈上创建对象的类第一种方法第二种方法不能被继承的类只能在堆上创建对象的类只能在堆上申请空间, 也就是只能动态申请不能在栈上创建对象, 所以我们首先就不能让构造函数随便被调用首先要将构造函数私有化构造函数私有化之后, 也无法在堆上创建对象所以我们要提供一个接口供外部调用, 通过这个接口创建对象因为构造函.原创 2021-03-28 22:03:22 · 284 阅读 · 1 评论 -
二叉树进阶 ---AVL树的介绍 AVL树插入的4种情况 (详细图解+代码演示)
之前几篇对map/multimap/set/multiset进行了简单的介绍,在其文档介绍中发现,这几个容器有个共同点是:其底层都是按照二叉搜索树来实现的,但是二叉搜索树有其自身的缺陷,假如往树中插入的元素有序或者接近有序,二叉搜索树就会退化成单支树,时间复杂度会退化成O(N),因此map、set等关联式容器的底层结构是对二叉树进行了平衡处理,即采用平衡树来实现。不知道大家还记不记得, 之前说map和set都是用红黑树实现的, 我们今天先不看红黑树, 先来看看高度平衡的AVL树文章目录AVL.原创 2021-03-04 18:02:20 · 314 阅读 · 2 评论 -
C++的STL学习: (关联式容器) map/multimap的接口认识和使用
上一篇我们介绍了set和multiset容器, 这次我们来看另外的两种树形结构的关联式容器 — map和multimap.文章目录一. map容器1. 容器介绍注意事项2. map的参数模板3. 接口介绍和使用构造函数迭代器元素访问容量相关修改操作其他操作二. multimap容器1. 容器介绍2. 接口使用使用map/multimap要包<map>头文件一. map容器1. 容器介绍map是关联容器,它按照特定的次序(按照key来比较)存储由键值key和值value组合而成.原创 2021-03-03 18:06:47 · 319 阅读 · 2 评论 -
C++的STL学习: (关联式容器) set/multiset接口的认识和使用
之前我们学习了STL中的许多容器和容器适配器, 比如: string, vector, list, stack, queue, deque等, STL中还有关联式容器 —map和set今天我们先来看一看set文章目录概念1. 关联式容器2. 键值对3. 树形结构的关联式容器set容器1. set介绍概念1. 关联式容器我们已经接触过STL中的部分容器,比如:string, vector, list, deque等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素.原创 2021-03-03 12:14:02 · 371 阅读 · 0 评论 -
C++的STL学习: 键值对, 关联式容器的介绍
文章目录1. 关联式容器2. 键值对3. 树形结构的关联式容器1. 关联式容器我们已经接触过STL中的部分容器,比如:string, vector, list, deque等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。2. 键值对用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量k原创 2021-03-03 12:04:03 · 1509 阅读 · 0 评论 -
二叉树进阶 --- 二叉搜索树的接口实现
这次我们进入一个全新的领域, 二叉树的进阶部分, 包含了二叉搜索树, STL中的map和set容器, AVl树, 红黑树等高阶数据结构. 今天我们先来研究二叉搜索树的接口实现.文章目录二叉搜索树的概念二叉搜索树的结点描述二叉搜索树的接口实现1. 整体框架&构造函数2. 查找3. 插入4. 中序遍历5. 删除6. 拷贝构造7. 赋值运算符重载8. 析构接口测试1. 插入&中序遍历测试2. 查找测试3. 删除测试4. 拷贝构造&赋值测试二叉搜索树的性能分析二叉搜索树的概念二.原创 2021-02-24 14:06:52 · 138 阅读 · 0 评论 -
(巨详细 + 图解) C++多态的机制原理
上一篇我们简单认识了C++的多态, 这次我们来看看多态的底层机制和原理. 不多哔哔, 直接开始.文章目录虚函数表(虚表)和虚表指针1. 虚表和虚表指针的认识2. 其他值得注意的问题3. 验证虚表存在哪里多态的原理动态绑定与静态绑定单继承和多继承关系的虚表1. 单继承中的虚表2. 验证虚表以nullptr结尾3. 多继承中的虚函数表关于虚函数的几个问题1. inline函数可以是虚函数吗?2. . 静态成员可以是虚函数吗?3. 构造函数可以是虚函数吗?虚函数表(虚表)和虚表指针1. 虚表和虚表指.原创 2021-02-16 23:50:56 · 792 阅读 · 2 评论 -
(详细)一篇认识C++面向对象特性 —— 多态
之前介绍了C++面向对象的一大特性 —— 继承, 今天我们就来看看另外的一大特性 —— 多态. 话不多说, 直接进入正题.文章目录多态的概念多态的定义及实现1.实现多态的条件2. 虚函数及虚函数的重写3. 代码示例4. 虚函数重写的的特殊形式(协变)5. 关键字 final & override析构函数与虚函数纯虚函数与抽象类接口继承与实现继承多态的概念简单来说,多态就是一个行为、多种状态。举个栗子:买火车票,都是买票这一行为,普通人只能买成人票,而我们大学生持有学生证就可以买学生.原创 2021-02-16 14:54:35 · 320 阅读 · 3 评论 -
C++继承的问题 : 菱形继承 (虚拟继承)
上一次我们学习了继承相关的知识, 这次我们来看看继承的问题 — 菱形继承.文章目录一. 什么是菱形继承二. 菱形继承的问题三. 虚拟继承一. 什么是菱形继承一图流解释二. 菱形继承的问题就拿上面的经典菱形继承来说, 从下面的对象成员模型构造,可以看出菱形继承有数据冗余和二义性的问题。在D类的对象中A类成员会有两份。.下面给出菱形继承的代码 ://菱形继承class AA {public: int _aa;};class BB : public AA { //AA::_.原创 2020-12-09 19:48:40 · 850 阅读 · 0 评论 -
(详细)了解面向对象的特性 : C++的继承
大家应该听过很多次了吧, 面向对象的三大特性 : 封装, 继承和多态…那么今天我们就来看看继承, 话不多说, 直接开冲!文章目录一. 继承的概念及定义1. 什么是继承?2. 继承的定义格式3. 继承方式和访问限定符4. 继承基类成员访问方式的变化二. 基类和派生类对象赋值转换1. 继承的证明2. 父子类对象的赋值问题子类对象赋值给父类对象/指针/引用父类对象赋值给子类对象/指针/引用一. 继承的概念及定义1. 什么是继承?继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保.原创 2020-12-09 17:25:50 · 144 阅读 · 0 评论 -
一篇读懂C++的IO流和文件操作
之前漫长的时间, 我们学习了C++中STL的几种容器, 适配器等组件. 现在STL先告一段落. 今天我们来看看C++的IO流和文件相关的操作. 话不多说, link start !文章目录一. 流的概念二. C++的标准IO流一. 流的概念“流”即是流动的意思,是物质从一处向另一处流动的过程,是对一种有序连续且具有方向性的数据的抽象描述。C++流是指信息从外部输入设备(如键盘)向计算机内部(如内存) 输入和从内存向外部输出设备(显示器)输出的过程。这种输入输出的过程被形象的比喻为“流”。流.原创 2020-12-07 23:11:37 · 768 阅读 · 0 评论 -
C++的STL学习 12 : priority_queue的使用和实现 [容器适配器, 仿函数]
之前我们学习了两种适配器 — stack和queue的使用和实现, 今天我们来学习另外一种常见的容器适配器 — priority_queue (优先级队列) 的使用和实现.文章目录一. priority_queue的认识二. priority_queue的接口使用三. 仿函数四. 堆的插入和删除五. priority_queue的实现1. priority_queue的实现2. 仿函数的实现3. 测试一. priority_queue的认识这是C++官方对priority_queue的定义, .原创 2020-11-28 15:32:53 · 374 阅读 · 0 评论 -
C++的STL学习 11 : queue的使用和实现 [容器适配器]
这次我们来学习queue(队列)的使用和实现, 话不多说, 直接开始.文章目录一. queue的认识二. queue的接口使用三. queue的实现1. 不包含第二参数的实现2. 带有第二参数的实现一. queue的认识这是C++官方对queue的定义, 和stack一样, 是有第二个参数的, 在创建queue对象的时候我们可以传入不同的容器创建不同底层结构的queue不过还是那句话, 一般情况是使用默认就挺好~二. queue的接口使用queue(队列)相信大家也不陌生吧, 先进先出.原创 2020-11-27 18:02:26 · 395 阅读 · 0 评论 -
C++的STL学习 10 : stack的使用和实现 [容器适配器]
上次我们简单了解了一下容器适配器与deque的结构和优劣, 这次我们就直接进入几种容器适配器的学习, 首先我们来看stack(栈).文章目录一. stack的认识二. stack的接口使用三. stack的实现1. 不包含第二参数的实现2. 带有第二参数的实现一. stack的认识这是C++官方对stack的定义, 我们可以看到他是有第二个参数的, 这个参数可以理解为底层实现的容器, 在创建stack对象的时候我们可以传入不同的容器创建不同底层结构的stack不过一般如果没有特殊需求的话, .原创 2020-11-27 17:39:42 · 222 阅读 · 0 评论 -
C++的STL学习 9 : 容器适配器的认识和 deque(双端队列)的基本认识
之前我们学习了STL的几个容器: string, vector, list. 今天我们来看容器适配器: stack(栈), queue(队列), priority_queue(优先级队列). 这次我们谈谈适配器的思想和 stack的使用和实现. 那么话不多说, 直入主题, 耐心看完, 你一定有所收获~文章目录一. 适配器的理解二. deque的简单认识一. 适配器的理解适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接.原创 2020-11-27 17:14:34 · 199 阅读 · 0 评论 -
C++的STL学习:vector与 list的对比 (顺序表和链表有什么不同?)
之前我们认识和使用了vector和list的各种接口,并且也自己模拟实现了vector和list的结构和各种接口。这次我们就来进行vector与list的对比,看看他们有什么异同。面试或者上课经常问到的顺序表和链表的区别有哪些,虽然简单但是也有许多的点,下面我们一起来看~vectorlist底层结构动态顺序表带头结点的双向循环链表随机访问支持随机访问,访问某个元素的效率为O(1)不支持随机访问,访问某个元素的效率为O(n)插入和删除尾插尾删效率高,为O(1.原创 2020-11-23 15:25:29 · 241 阅读 · 0 评论 -
(超详细 + 逐个解读)C++的STL学习 8 : list 的模拟实现 (具体实现)
上次我们学习了list容器的各种接口的使用, 那么按照惯例, 这次我们就来模拟实现一个自己的list, 方便我们对list容器有更深层次的理解. 那么话不多说, 直接开整.文章目录一. list的结构描述一. list的结构描述list是一个带头双向循环链表, 首先它是一个链表, 所以我们要封装一个结点的结构体当然这个结点也是模板, 里面有两个指针和一个数据, 并且有一个构造函数//结点template <class T>struct ListNode { T _data.原创 2020-11-22 17:27:28 · 96 阅读 · 0 评论 -
(超详细 + 实例演示)C++的STL学习 7 : list 的学习, 接口的使用和认识
之前我们学习了STL的两大容器 — string 和 vector , 这两个容器在平常的使用是非常多且非常方便的. 他们都是线性表. 那我们今天来看另外一种常用链表容器 — list. 本篇与之前类型一样, 给出STL库中list的各种接口, 和相关的测试代码. 耐心看完, 你一定有所收获~文章目录一. list 的认识二. list 常用接口说明1. list的构造函数2. 迭代器和访问3. 容量相关4. 内容修改相关5. 其他操作一. list 的认识list是带头双向循环链表lis.原创 2020-11-22 08:35:16 · 131 阅读 · 0 评论 -
(超详细 + 逐个解读) C++的STL学习 6 : vector的模拟实现 (具体实现)
上一次我们认识了vector的各种接口, 我们可以发现, STL容器中的许多接口都是非常类似的, 使用方法也很相似, 方便了我们的使用. 那么今天, 我们趁热打铁, 来模拟实现一下vector, 加深对vector容器的理解. 耐心看完, 你一定有所收获~文章目录一. vector的结构描述一. vector的结构描述vector实际上是由三个指针描述的, 如下如所示 :所以vector的成员就是三个指针而且vector应用模板, 实现泛型template <class T>.原创 2020-11-17 17:31:25 · 176 阅读 · 0 评论 -
(超详细 + 实例演示) C++的STL学习 5 : vector的学习, 接口的使用和认识
之前我们学习了STL的字符串string类, 不知道大家用起来方不方便, 反正我是用起来非常奈斯的~.这次我们来学习另外一个非常非常重要的容器 — vector — 可变的数组容器, vector使用起来也是十分的方便, 解决了之前要考虑数组长度, 空间够不够用的问题…那么话不多说, 直接开始吧. 耐心看完 你一定有所收获~文章目录一. vector的认识二. vector常用接口说明1. vector的构造函数2. 迭代器和访问3. 容量相关4. 内容修改相关三. 迭代器失效问题一. vec.原创 2020-11-16 21:08:14 · 285 阅读 · 0 评论 -
(超详细 + 逐个解读) C++的STL学习 4 : string类的模拟实现(具体实现)
上一次我们实现了string的基本功能, 为了加深对string容器的理解, 这次我们要实现他的很多基本功能, 虽说是实现, 但也不可能和库中的string完全相同, 只能说尽量向库中的容器靠拢.那么话不多说, 我们直接开始吧. 可能会有点多, 耐心看完, 你一定有所收获~文章目录一. 成员变量二. 基本功能1. 构造函数2. 拷贝构造3. 赋值运算符重载函数4. 析构函数三. 插入删除相关1. reserve增容函数2. 尾插字符 push_back3. 尾插字符串append4. +=运算符重载.原创 2020-11-10 19:12:20 · 105 阅读 · 1 评论 -
(超详细 + 逐个解读) C++的STL学习 3 : string类的简单实现(深浅拷贝问题+基本功能的实现)
经过上一次的string类学习, 想必大家都对string容器有一定的了解了吧. 大家都有在用string吗? 个人觉得是非常好用的…无论是平时写代码还是刷题, 都是非常好用的容器~当面试的时候有非常大的概率面试官就会让你当场实现一个string类, 那我们今天就来看看怎么简单实现一个有基本功能的string类~, 耐心看完, 你一定有所收获.文章目录一. 深浅拷贝的问题二. string类的简单实现1. 构造函数2. 析构函数3. 拷贝构造4. 赋值运算符重载函数5. 拷贝构造和赋值运算符的现代.原创 2020-11-09 22:21:37 · 189 阅读 · 0 评论 -
(超详细 + 例子演示) C++的STL学习 2 :string类的学习, 接口的使用和认识
想必大家在学习C语言的时候都有被字符串和指针支配的恐惧吧, 在C语言中使用char* 表示的字符串, 一不留神丢了一个’\0’, 或者一不留神指针就会越界, 搞的我是苦不堪言. 在C++中引入string则不需要我们考虑这些问题, 极大的方便了我们的使用. 那么我们这次就来学习一下string类, 耐心看完, 你一定会有所收获~文章中的所有代码都是调试过的代码, 并且测试代码中的注释也有许多知识点, 有兴趣的朋友不要错过, 可以拿去自己调试一下, 会有更清晰的理解文章目录0. 先推荐一个网址1.st.原创 2020-11-09 15:42:26 · 283 阅读 · 0 评论 -
C++的STL学习1 : STL简介
STL是C++中的库的重要组成, “如果你不会STL, 说明你不爱C++”, 使用STL确实能极大的方便我们的代码书写. 本次就给大家简单的介绍一下STL, 耐心看完, 你一定有所收获~文章目录1. 什么是STL2. STL的版本3. STL的六大组件1. 什么是STLSTL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且 是一个包罗数据结构与算法的软件框架。2. STL的版本原始版本Alexander St.原创 2020-11-09 10:52:21 · 151 阅读 · 0 评论 -
带你了解 C++的模板 (初阶 : 泛型编程, 函数模板, 类模板)
相信大家都自己写过交换函数 Swap( ) 吧 , 实现起来非常简单, 没有什么难度. 但是如果是做一些项目开发的时候, 有十几种甚至几十种数据类型的时候, 如果要你写十几遍甚至几十遍的 Swap() 函数, 想必大家都会疯吧~今天要介绍的泛型编程就是解决这一问题的 ! 耐心看完, 你一定会有所收获 !文章目录1. 泛型编程2. 函数模板1. 泛型编程为了解决开头说到的问题, 减轻程序猿的工作量, 大佬们就发明了泛型编程的概念. 正所谓 “世界是懒人创造的” ~泛型编程就是引入了templat原创 2020-11-01 14:14:48 · 248 阅读 · 0 评论 -
带你了解 C & C++ 中的内存管理
文章目录1. C/C++内存分布2. C语言中动态内存管理malloccallocreallocrealloc的3种情况free3. C++的内存管理4. operator new 与 operator delete5. new 和 delete的实现原理内置类型自定义类型new的原理delete的原理new T[N]delete[N]new的定位表达式1. C/C++内存分布首先我们来自己画一个大致的分布情况大致就是下图所示具体如下:栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向原创 2020-10-25 13:31:34 · 148 阅读 · 0 评论 -
类和对象 4 (初始化列表, static成员, 友元类等)
一. 初始化列表位于构造函数的参数列表和函数体之间, 格式如下 :(冒号): 成员(初始化值/表达式) , 成员2(初始化值/表达式) …想必大家对初始化一定不陌生吧, 就是定义一个变量的时候给一个初始值1. 先看看怎么写下面直接给出一个具体的日期类为例里面的细节下面会说, 不必惊慌一定要分清楚变量在哪声明, 在哪定义, 在哪是初始化, 在哪是赋值class Date {public: Date(int y = 2000, int m = 1, int d = 1) //初始化列原创 2020-10-24 21:42:36 · 206 阅读 · 0 评论 -
类和对象 3 (日期类的实现)
这钵啊, 这钵就是是骡子是马吗拉出来溜溜这日期类的实现..也没什么好说的...我直接就把代码放这里了熬~具体细节都写在里面了~ #include<iostream>using namespace std;class Date {public: //构造函数 Date(int year = 2000, int month = 9, int day = 28) { //判断日期是否合法 if (year > 0 && month > 0 &原创 2020-09-18 21:49:35 · 173 阅读 · 0 评论 -
类和对象 2 (6个成员函数)
空类中真的是空的吗?当然不是了 ! ! !编译器会自动生成成员函数下面我们就来看看这些成员函数1. 构造函数函数名和类名相同, 无返回值, 可以重载, 编译器在创建时自动调用首先来看看默认构造默认构造函数 : (一个类中只能存在一个, 且必须存在一个默认构造函数)1. 编译器默认生成 2. 显示定义的无参构造3. 全缺省构造函数注意: 只要显式定义了构造函数, 编译器就不会自动生成默认构造, 不管你定义的是不是默认构造 所以我们一般直接显式给一个全缺省的构造函数cla原创 2020-09-18 21:38:35 · 220 阅读 · 0 评论 -
类和对象 1 (类和对象引入, 限定符及封装, 类大小的计算, this指针)
1. C++定义类的方式 & 封装: (1). struct + 类名 + { } + ; (默认访问权限是public) (2). class + 类名 + {} + ; (默认访问权限是private)类中可以定义成员变量和成员函数C++的封装的语法体现: 类, 访问限定符访问限定符 : public, protected, private作用范围: 从当前限定符到下一个限定符只限制成员在类外的访问权限, 类内部不受限制要说明的是protected在这里不多做解释,原创 2020-09-18 13:21:58 · 83 阅读 · 0 评论 -
C++入门基础语法 2 (引用, 内联函数, auto, 范围for, nullptr)
话不多说, 直接开始.1. 引用引用是C++中非常非常非常重要的语法, 以后会经常用到的虽然非常重要, 但好在语法也是比较简单的所谓引用, 其实就是给变量起了个别名 (就像我们每个人都有大名和小名一样)void test9() { //引用 : 类型 + & + 引用名称 //引用在定义时必须要初始化 int a = 10; //a的别名 int& ra = a; int& ra2 = a; ra2 = 30; ra = 100; a = 1000;原创 2020-09-12 20:03:08 · 149 阅读 · 0 评论 -
C++入门基础语法 1 (命名空间, 输入输出, 缺省参数, 函数重载)
C++作为现在不可替代的一门语言, 仍然在市场上保持着强大的竞争力.想必大家都听过C++是一门把代码效率加到极致的编程语言.作为一名初学者小白, 我就把自己学习的过程通过博客的形式总结一下. 希望能对来访的你有一点点点点的帮助.那么接下来就开始吧 !ps: 上下代码都是连贯的, 为了方面看才分开, 假如你有点懵, 和前后联一波~命名空间(1). 首先来看怎么写//命名空间 namespacenamespace bite { void print(int a) { printf(原创 2020-09-12 19:12:54 · 177 阅读 · 3 评论