
[C++系列]
文章平均质量分 92
日常更新C++各类知识点,每天学习,每天有所进步。
Ypuyu
Ypuyu
展开
-
[C++系列] 0. C++系列博文汇总
C++系列该专栏收录了学习C++路途中的大大小小知识点,及相关的OJ题目练习。旨在梳理各知识点的基础知识,为突破重难点打地基,也是一份回头复习的第一手资料。学习C++路途漫长,知识点繁多,及时的总结、梳理知识点是相当有必要的。由于文章越来越多不方便查看,做成表格链接会很醒目、方便。C++系列优快云博客文章链接:主题1. C++初识2. C++关键字、命名空间、输入与...原创 2019-10-09 00:48:16 · 2380 阅读 · 6 评论 -
[C++ 系列] 90. 超详解C++思维导图
这段时间针对 C++ 的学习到了一个收尾的阶段。目前所涉及到了 C++ 基础语法、大小知识点的学习。当然语言学习绝对离不开实战项目的练手,网络优质资源以及各类经典丛书也是 C++ 学习的巨大宝库。在此以思维导图的形式进行阶段性总结。本张思维导图列出 C++ 继承、多态、智能指针、关联式容器、C++11 的相关知识,也是对博文的高度总结。可参考上几次的阶段性总结也是制作了一张思维导图,可见:[C+...原创 2020-03-20 09:52:54 · 2002 阅读 · 56 评论 -
[C++系列] 89. C++11新特性简单介绍
文章目录1. C++11简介2. 列表初始化2.1 C++98中{}的初始化问题2.2 内置类型的列表初始化2.3 自定义类型的列表初始化3. 变量类型推导3.1 为什么需要类型推导3.2 decltype类型推导4. 基于范围的for循环5. final与override6. 智能指针7. 新增加容器8. 委派构造函数8.1 构造函数冗余造成重复8.2 委派构造函数9. 默认函数控制9.1 显...原创 2020-03-20 09:01:03 · 547 阅读 · 0 评论 -
[C++ 系列] 88. STL进阶及简单总结
文章目录1. STL的本质2. STL的六大组件2.1 容器2.2 算法2.3 迭代器2.3.1 什么是迭代器2.3.2 为什么需要迭代器2.3.3 迭代器应该由谁负责提供2.3.4 迭代器实现原理2.3.5 迭代器与类的融合2.3.6 反向迭代器2.3.7 迭代器萃取(了解)2.4 适配器2.5 仿函数2.6 空间配置器3. STL框架1. STL的本质通过前面的学习以及使用,我们对 STL...原创 2020-03-19 15:30:59 · 760 阅读 · 2 评论 -
[C++ 系列] 87. 简要剖析SGI-STL空间配置器
文章目录1. 什么是空间配置器2. 为什么需要空间配置器3. SGI-STL空间配置器实现原理3.1 一级空间配置器3.1.1 简单的 `set_new_handle` 实例3.1.2 模拟实现一级空间配置器3.2 二级空间配置器3.2.1 内存池3.2.2 SGI-STL中二级空间配置器设计3.2.3 SGI-STL二级空间配置器之空间申请3.3.4 SGI-STL二级空间配置器之空间回收3.4...原创 2020-03-18 18:59:06 · 909 阅读 · 4 评论 -
[C++ 系列] 86. 海量数据处理
文章目录1. 布隆过滤器提出2. 布隆过滤器概念3. 布隆过滤器的插入4. 布隆过滤器的查找5. 布隆过滤器删除6. 如何选择哈希函数个数和布隆过滤器长度6. 布隆过滤器优点7. 布隆过滤器缺陷1. 布隆过滤器提出讲述布隆过滤器的原理之前,我们先思考一下,通常你判断某个元素是否存在用的是什么?应该蛮多人回答 HashMap 吧,确实可以将值映射到 HashMap 的 Key,然后可以在 O(1...原创 2020-03-16 19:18:52 · 1910 阅读 · 4 评论 -
[C++ 系列] 85. 布隆过滤器
文章目录1. 布隆过滤器提出2. 布隆过滤器概念3. 布隆过滤器的插入4. 布隆过滤器的查找5. 布隆过滤器删除6. 如何选择哈希函数个数和布隆过滤器长度6. 布隆过滤器优点7. 布隆过滤器缺陷1. 布隆过滤器提出讲述布隆过滤器的原理之前,我们先思考一下,通常你判断某个元素是否存在用的是什么?应该蛮多人回答 HashMap 吧,确实可以将值映射到 HashMap 的 Key,然后可以在 O(1...原创 2020-03-16 17:29:32 · 724 阅读 · 0 评论 -
[C++ 系列] 84. 位图的概念及应用
文章目录1. 一个面试题2. 位图概念3. 位图的模拟实现1. 一个面试题话说海量数据面试题火爆于各类面试环节中,动不动就 100G 数据查一个数是不是存在啥的…其实考的就是位图这个知识点,也是哈希的应用。面试题给 40 亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这 40 亿个数中。【腾讯】遍历,时间复杂度 O(N)O(N)O(N)外部排序 (O(...原创 2020-03-16 17:09:22 · 398 阅读 · 2 评论 -
[C++ 系列] 83. unordered_map模拟实现
文章目录1. 哈希表改造2. unordered_map 模拟实现3. 其它1. 哈希表改造针对上文中所模拟实现的开散列,进行以下两点改造:模板参数列表的改造// K:关键码类型// V: 不同容器V的类型不同,如果是unordered_map,V代表一个键值对,如果是unordered_set,V 为 K// KeyOfValue: 因为V的类型不同,通过value取key的方式...原创 2020-03-15 23:33:22 · 478 阅读 · 2 评论 -
[C++ 系列] 82. 详解哈希结构解决哈希冲突及模拟实现闭散列、开散列
文章目录1. 哈希概念2. 哈希冲突3. 哈希函数4. 解决哈希冲突4.1 闭散列4.1.1 线性探测4.1.2 线性探测实现4.1.3 什么时机增容,如何增容4.1.4 线性探测优缺点4.1.5 二次探测4.2 开散列1. 哈希概念顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序查找时间复杂度为 O(N)O(N)O(N),...原创 2020-03-15 20:35:15 · 589 阅读 · 0 评论 -
[C++ 系列] 81. unordered系列关联式容器OJ应用
文章目录1. 重复 n 次的元素2. 两句话中的不常见单词3. 存在重复元素4. 两个数组的交集 I5. 两个数组的交集 II1. 重复 n 次的元素LeetCode 重复 n 次的元素// 执行用时 :56 ms, 在所有 C++ 提交中击败了43.44%的用户// 内存消耗 :31.1 MB, 在所有 C++ 提交中击败了5.30%的用户class Solution {publi...原创 2020-03-14 23:36:18 · 200 阅读 · 0 评论 -
[C++ 系列] 80. unordered系列关联式容器
文章目录1. unordered 系列关联式容器2. unordered_map2.1 unordered_map 的文档介绍2.2 unordered_map 的接口说明3. unordered_set3.1 unordered_set 的文档介绍3.2 unordered_set 的接口说明1. unordered 系列关联式容器在 C++98 中,STL 提供了底层为红黑树结构的一系列关...原创 2020-03-14 23:35:37 · 314 阅读 · 2 评论 -
[C++ 系列] 79. 基于4阶B树详解R-BTree红黑树
文章目录1. 红黑树的概念2. 请问下面这颗是红黑树吗?AA1. 红黑树的概念红黑树也是一种自平衡二叉搜索树,以前也叫做平衡二叉 B 树 ( Stmmertic Binary B-tree )。红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍*...原创 2020-02-13 21:48:07 · 2396 阅读 · 9 评论 -
[C++ 系列] 78. 详解B树搜索、添加、删除
文章目录0. 前言1. B树(B-Tree、B-树)2. m阶B树的性质(m ≥ 2)3. B树与二叉搜索树的关系4. 搜索数据5. 添加数据6. 添加 – 上溢的解决(假设5阶)7. 删除数据7.1 删除叶子节点7.2 删除非叶子节点7.3 删除 ---下溢的解决(假设5阶)8. 4阶B树0. 前言为了能够给后章节的红黑树做个铺垫,先学习一下B树。1. B树(B-Tree、B-树)B 树...原创 2020-02-13 21:43:38 · 661 阅读 · 0 评论 -
[C++系列] 77. 详解AVL平衡二叉搜索树
文章目录1. AVL 树的概念2. AVL 树节点的定义3. AVL树的插入与失衡4. AVL树的旋转4.1 新节点插入较高左子树的左侧---左左:右单旋4.2 新节点插入较高右子树的右侧---右右:左单旋4.3. 新节点插入较高左子树的右侧---左右:先左单旋再右单旋4.4. 新节点插入较高右子树的左侧---右左:先右单旋再左单旋5. AVL树旋转总结:6. AVL树的实现7. AVL树的验证7...原创 2020-02-10 18:32:09 · 833 阅读 · 1 评论 -
[C++系列] 76. 详解BST二叉搜索树
文章目录添加链接描述添加链接描述原创 2020-02-08 02:25:19 · 413 阅读 · 0 评论 -
[C++系列] 75. 关联式容器、map/multimap详解、set/multiset详解
文章目录1. 关联式容器2. 键值对3. 树形结构的关联式容器3.1 map3.1.1 map 的介绍3.1.2 map 的使用3.1.3 map 总结3.2 multimap3.2.1 multimap的介绍3.2.2 multimap的使用1. 关联式容器在初阶阶段,我们已经接触过STL中的部分容器,比如:vector、list、deque、forward_list(C++11)等,这些容...原创 2020-02-06 17:04:54 · 469 阅读 · 0 评论 -
[C++系列] 74. 类型系统和类型安全
文章目录1. 类型系统1.1 强类型定义和弱类型定义语言1.2 动态类型语言和静态类型语言2. 类型安全3. C++ 和 C 差别 (类型系统角度分析) 4. C++ 和 C 有什么不同 (品,细品)1. 类型系统类型系统(type system) 是一门编程语言最核心也是最基础的部分。一门计算机语言无论基于何种编程范式,都必须首先对类型系统作出明确的定义。类型系统用于定义如何将编程语言中...原创 2020-02-04 01:22:00 · 724 阅读 · 0 评论 -
[C++系列] 73. C++的类型转换
文章目录1. C 语言中的类型转换2. C++强制类型转换2.1 static_cast2.2 reinterpret_cast2.3 const_cast2.4 dynamic_cast2.5 explicit3. 为什么C++需要四种类型转换4. RTTI5. 总结1. C 语言中的类型转换void Test () { int i = 1; // 隐式类型转换 ...原创 2020-02-04 00:17:48 · 363 阅读 · 0 评论 -
[C++系列] 72. 智能指针
文章目录1. 为什么需要智能指针2. 智能指针的使用及原理2.1 RAII2.2 智能指针的原理2.3 std::auto_ptr2.4 std::unique_ptr2.5 std::shared_ptr3. C++11和boost中智能指针的关系4. RAII 扩展学习1. 为什么需要智能指针下面我们先分析一下下面这段程序有没有什么内存方面的问题?提示一下:注意分析MergeSort归并排...原创 2020-02-03 23:30:04 · 477 阅读 · 0 评论 -
[C++系列] 71. 异常
文章目录1. C 语言传统处理错误的方式2. C++ 异常概念3. 异常的使用3.1 异常的抛出和捕获3.2 异常的重新抛出3.3 异常安全3.4 异常规范4. 自定义异常体系5. C++ 标准库的异常体系6. 异常的优缺点7. 总结1. C 语言传统处理错误的方式传统的错误处理机制:终止程序,如 assert,缺陷:用户难以接受。如发生内存错误,除 0 错误时就会终止程序。返回错误码,...原创 2020-02-03 20:45:08 · 739 阅读 · 0 评论 -
[C++系列 70. 菱形继承及菱形虚拟继承
文章目录0. 前述1. 单继承与多继承2. 菱形继承3. 继承的总结和反思4. 常见笔试面试题5. 继承总结0. 前述本篇博文承接[C++系列] 67. 继承基础讲解部分,进一步深入讨论更为复杂的菱形继承。为更进一步加深理解,可参考[C++系列] 68.多态基础及虚函数、抽象类详解、[C++系列] 69. 多态的原理这两篇博文。1. 单继承与多继承单继承:一个子类只有一个直接父类时称这个...原创 2020-02-02 17:36:49 · 490 阅读 · 0 评论 -
[C++系列] 69. 多态的原理
文章目录1. 虚函数表2. 多态的原理3. 动态绑定与静态绑定4. 单继承和多继承关系的虚函数表4.1 单继承中的虚函数表4.2 多继承中的虚函数表4.3 菱形继承、菱形虚拟继承5. 多态常见的问题6. 多态总结1. 虚函数表// 这里常考一道笔试题:sizeof(Base)是多少?class Base{public: virtual void Func1() { ...原创 2019-12-11 18:55:50 · 408 阅读 · 0 评论 -
[C++系列] 68. 多态基础及虚函数、抽象类详解
文章目录1. 多态的概念1.1 概念2. 多态的定义及实现2.1 多态定义的构成条件2.2 重载、覆盖(重写)、隐藏(重定义)的对比3. C++11 override 和 final4. 抽象类4.2 接口继承和实现继承1. 多态的概念1.1 概念多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。举个栗子:比如买票这个行为,当普通人买票时,...原创 2019-12-11 18:53:00 · 465 阅读 · 0 评论 -
[C++系列] 67. 继承基础讲解
1. 继承的概念及定义1.1 继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。 class Person{public: void P...原创 2019-12-11 18:52:16 · 817 阅读 · 0 评论 -
[C++系列] 66. 超详解C++阶段性总结思维导图
又经过一段时间的 C++基础知识学习,在此进行阶段性总结。本张思维导图列出C++入门、类和对象、内存管理、模板、STL、IO中的大大小小知识点,用以总结该博客C++系列前65章节内容。在上一个阶段性总结也是制作了一张思维导图,可见:[C++系列] 33. 思维导图—类和对象若该图片不够清楚,且需要该思维导图的话请在下方评论留言(请直接留下联系方式,qq、邮箱等),我会尽快给大家将两张思维导图均...原创 2019-12-09 21:11:23 · 814 阅读 · 18 评论 -
[C++系列] 65. IO流
1. C语言的输入与输出C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。注意宽度输出和精度输出控制。 C语言借助了相应的缓冲区来进行输入与输出。如下图所示: 对输入输出缓冲区的理解:1.可以屏蔽掉低级I/O的实现,低级I/O...原创 2019-12-09 20:02:58 · 389 阅读 · 0 评论 -
[C++系列 64. 模板深层次讨论
1. 非类型模板参数模板参数分类类型形参与非类型形参。类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。非类型形参:就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。// 定义一个模板类型的静态数组template<class T, size_t N = 10>class Array{publi...原创 2019-12-07 12:10:21 · 387 阅读 · 0 评论 -
[C++系列] 63. 二叉树的类模板实现及相关OJ
#pragma once#include <stack>#include <queue>namespace yl {template < class T >class TreeNode{ T m_val; TreeNode<T> * m_left; TreeNode<T> * m_right;public: ...原创 2019-12-07 10:51:00 · 444 阅读 · 0 评论 -
[C++系列] 62. 容器适配器及stack、queue的模拟实现
1. 容器适配器1.1 什么是适配器适配器器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该中模式是将一个类的接口转换成客户希望的另外一个接口。1.2 为什么将stack、queue和priority_queue称作为容器适配器虽然stack、queue、priority_queue中也可以存放元素,但在STL中并没有将其划分在容器的行列...原创 2019-12-07 10:50:25 · 396 阅读 · 0 评论 -
[C++系列] 61. priority_queue介绍使用及相关OJ
1. priority_queue的介绍和使用1.1 priority_queue的介绍1.优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。2. 此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。3. 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函...原创 2019-12-07 10:49:55 · 398 阅读 · 0 评论 -
[C++系列] 60. queue介绍使用及相关OJ
1. queue的介绍和使用1.1 queue的介绍1.队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层...原创 2019-12-07 10:49:16 · 429 阅读 · 0 评论 -
[C++系列] 59. stack介绍使用及相关OJ、二叉树三序遍历、LCA问题
1. stack的介绍和使用1.1 stack的介绍1.stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。3. stack的底层容器可以是...原创 2019-12-07 10:48:24 · 501 阅读 · 0 评论 -
[C++系列] 58. deque底层实现原理剖析
文章目录概述deque的中控器deque的迭代器deque的数据结构deque的构造与内存管理deque的元素操作概述vector是单向开口的连续线性空间,deque则是一种双向开口的连续线性空间。所谓双向开口,意思是可以在头尾两端分别做元素的插入和删除操作。vector当然也可以在头尾端进行操作(从技术观点),但是其从头部操作效率奇差,无法被接受。deque和vector的最大差异,一...转载 2019-12-03 10:22:08 · 7431 阅读 · 1 评论 -
[C++系列] 57. deque的介绍及使用
1. deque的介绍及使用1.1 deque的介绍1.deque(发音类似“deck”),是双端队列不规则的首字母缩写即:double ended queue,双端队列是动态大小的序列式容器,其可以像两端进行伸缩。2. 特定的库可以以不同的方式实现deque,但通常都是一种动态数组。不论在何种情况下,它都允许通过随机访问迭代器直接访问单个元素,可以根据需要动态的伸缩。3. 因此,dequ...原创 2019-12-03 10:21:22 · 498 阅读 · 0 评论 -
[C++系列] 56. list深度剖析及模拟实现
1. std::list的核心框架接口的模拟实现bit::Listnamespace bit{ // List的节点类 template<class T> struct ListNode { ListNode(const T& val = T()) : _pPre(nullptr) , _pNe...原创 2019-12-02 11:00:53 · 416 阅读 · 0 评论 -
[C++系列] 55. list与vector的对比
vector与list都是STL中非常重要的序列式容器,由于两个容器的底层结构不同,导致其特性以及应用场景不同,其主要不同如下:vectorlist底层结构动态顺序表,一段连续空间带头结点的双向循环链表随机访问支持随机访问,访问某个元素效率O(1)不支持随机访问,访问某个元素效率O(N)插入和删除任意位置插入和删除效率低,需要搬移元素,时间复杂度为O(...原创 2019-12-02 11:00:35 · 518 阅读 · 0 评论 -
[C++系列] 54. list的介绍及使用
1. list的介绍及使用1.1 list的介绍list的文档介绍1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,...原创 2019-12-02 10:59:52 · 423 阅读 · 0 评论 -
[C++系列] 53. vector深度剖析及模拟实现
0. std::vector1. std::vector的核心框架接口的模拟实现bit::Vector // #include <iostream>#include <algorithm>#include <assert.h>#include <string>using namespace std; // 注意这里namesp...原创 2019-12-01 11:24:52 · 594 阅读 · 1 评论 -
[C++系列] 1. C++初识
现由于个人学习情况和进度开始对C++进行系统学习,将会在本博客中持续维护[C++系列],其中包含C++中大大小小的知识点,主要为了记录自己学习途中的知识学习进度情况,也希望能够与大家互相交流,共同学习,共同进步!1. 什么是C++ C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 2...原创 2019-03-13 19:03:52 · 1007 阅读 · 2 评论