
C++
文章平均质量分 65
杯酒问苍天
位卑未敢忘忧国
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
[C++]特殊类设计
单例模式:一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。第一次使用实例对象时,创建对象。多个单例实例启动顺序自由控制。缺点:可能导致进程启动慢;若两个单例有启动的先后顺序,则饿汉无法控制。由于派生类要调用父类的构造函数,所以将构造函数私有化。加上final关键字,表示该类不能被继承。原创 2024-12-05 11:12:49 · 283 阅读 · 0 评论 -
[C++] C++11新增
在C++98中,标准允许使用花括号{}对数组元素进行统一的列表初始值设定。原创 2024-07-30 00:38:48 · 1104 阅读 · 0 评论 -
[C++]智能指针
RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源。借此,我们实际上把管理一份资源的责任托管给了一个对象。这种做简单来说,智能指针是RAII思想的一种实现。原创 2024-07-30 00:37:36 · 619 阅读 · 0 评论 -
[C++]位图+布隆过滤器
位图,就是用每一位(bit)来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。如:数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0代表不存在。我们将每一个数据都以某种方式映射到位图中,那么一个位置就代表了其所对应的数据,一个数据只映射到其对应的位置中(一一对应)。原创 2024-07-14 17:21:44 · 422 阅读 · 0 评论 -
[C++]哈希
在顺序结构以及平衡树中,元素关键码(key)与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码(key)的多次比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,即O(log2 N),搜索的效率取决于搜索过程中元素的比较次数。理想的搜索方法:可以不经过任何比较,一次直接从表中得到要搜索的元素。如果构造一种存储结构,通过某种函数(HashFunc)使元素的存储位置与它的关键码(key)之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。原创 2024-07-14 13:22:52 · 1074 阅读 · 0 评论 -
[C++]红黑树
红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。性质:每个结点不是红色就是黑色根节点是黑色的如果一个节点是红色的,则它的两个孩子结点是黑色的对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点每个叶子结点都是黑色的(此处的叶子结点指的是空结点)原创 2024-05-29 12:50:53 · 759 阅读 · 0 评论 -
【C++】AVL树
AVL树是一种平衡的二叉搜索树,它的特点是任何节点的两个子树的高度最大差别为1,也就是说它是高度平衡的。AVL树的查找、插入和删除的时间复杂度都是O(log n),但是插入和删除可能需要通过旋转来调整树的结构。AVL树是两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明的,达到降低树的高度,从而减少平均搜索长度的目的。原创 2024-05-23 17:09:11 · 556 阅读 · 0 评论 -
[C++]map && set
Compare: 比较器的类型,map中的元素是按照key来比较的,缺省情况下按照小于来比较,一般情况下(内置类型元素)该参数不需要传递,如果无法比较时(自定义类型),需要用户自己显式传递比较规则(一般情况下按照函数指针或者仿函数来传递)multimap和map的唯一不同就是:map中的key是唯一的,而multimap中key是可以重复的。Alloc:通过空间配置器来申请底层空间,不需要用户传递,除非用户不想使用标准库提供的空间配置器。key: 键值对中key的类型。T: 键值对中value的类型。原创 2024-04-11 12:13:48 · 660 阅读 · 0 评论 -
[C++]二叉搜索树
对于二叉搜索树的插入操作,我们将需要插入的key值与当前结点(初始结点是root结点)比较,若小于该结点的值,则往左子树走;若大于该结点的值,则往右子树走。对于二叉搜索树的查找操作,我们将需要查找的key值与当前结点(初始结点是root结点)比较,若小于该结点的值,则往左子树走;若大于该结点的值,则往右子树走。若走到空,则说明没有这个值,返回空指针。若找到该值,则返回该值的结点。走到空结点的时候,那么这个位置就是这个key值的归宿。使用中序遍历二叉搜索树时,我们得到的是一个递增序列。原创 2024-02-18 22:04:18 · 490 阅读 · 0 评论 -
[C++]多态
重载:两个函数在同一作用域函数名、参数相同重写:两个函数分别在基类和派生类的作用域函数名、参数、返回值都必须相同(协变例外)两个函数必须是虚函数重定义:两个函数分别在基类和派生类的作用域函数名相同两个基类和派生类的同名函数不构成重写就是重定义。原创 2024-02-15 12:20:39 · 1037 阅读 · 0 评论 -
[C++]继承(续)
在public继承时,父类和子类是一个“is - a”的关系。子类对象赋值给父类对象/父类指针/父类引用,我们认为是天然的,中间不产生临时对象,也叫作父子类赋值兼容规则(切割/切片)。原创 2024-02-01 14:30:08 · 769 阅读 · 0 评论 -
[C++]初识继承
/ 派生类↓ 继承方式↓ 基类↓private:继承基类成员访问方式的变化(即为类成员的访问限定符与继承方式的访问限定符中权限最低的那一个(如:public和protected,则为protected)):基类private成员在派生类中无论以什么方式继承都是不可见的。这里的不可见是指基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面都不能去访问它。原创 2024-01-31 21:48:51 · 455 阅读 · 0 评论 -
[C++]模版(进阶学习)
模板参数分类:类型形参与非类型形参。类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。注意:1.浮点数、类对象以及字符串是不允许作为非类型模板参数的。(即只能使用整型(字符亦可,本质不变))2. 非类型的模板参数必须在编译期就能确认结果。(即必须传确定的值,不能传变量)原创 2024-01-31 14:25:46 · 535 阅读 · 0 评论 -
[C++]priority_queue——优先级队列(含模拟实现)
priority_queue 是容器适配器,它提供常数时间的(默认)最大元素查找,对数代价的插入与释出。可用用户 提供的Compare更改顺序,例如,用 std::greater 将导致最小元素作为出现。用工作类似管理某些随机访问容器中的,优势是不可能突然把堆非法化。原创 2024-01-27 07:07:46 · 442 阅读 · 0 评论 -
[C++] 迭代器失效示例
我们以模拟实现vector为例。这里的pos会变成野指针。当扩完容后,由于空间的改变,_start和_finish和_endofstorage的指向就变了。所以pos失效。原创 2023-08-18 07:34:49 · 217 阅读 · 0 评论 -
【C++】模拟实现string
【代码】【C++】模拟实现string。原创 2023-08-15 16:16:40 · 162 阅读 · 0 评论 -
【C++】速识string
对于string,我们可以像对数组那样,使用[],即通过下标的方式,来读写string中的内容。原创 2023-08-14 08:17:46 · 143 阅读 · 0 评论 -
【C++】速识模板(template<class T>)
函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。在编译器编译阶段,对于模板函数的使用,编译器需要根据传入的实参类型来推演生成对应类型的函数以供调用。原创 2023-08-12 12:45:18 · 1376 阅读 · 0 评论 -
【C++】友元(含内部类)
友元函数可访问类的私有和保护成员,但不是类的成员函数友元函数不能使用const修饰友元函数可以在类定义的任何地方声明,不受访问限定符(public/private/protected)限制一个函数可以是多个类的友元函数友元函数的调用与普通函数的调用原理相同原创 2023-08-11 18:47:46 · 253 阅读 · 0 评论 -
[C++] 自定义的类如何使用“cout“和“cin“?(含日期类实现)
在C++中,“cin”和"cout"可以说是区别于C语言的一大亮点。但是,它的自动识别类型,其本质不过是运算符重载。若真到了能够“自动识别”的那一天,人类大概也能进入新的纪元了罢。对于我们自己写的类,想要用cout,cin,当然是可以的,我们只需自己写它的重载即可。本文将以“cout”为例。原创 2023-08-10 14:22:49 · 1041 阅读 · 1 评论 -
【C++】内联函数(inline)
inline对于编译器而言只是一个建议 ,编译器会自动优化,如果定义为inline的函数很长或者是递归函数等,编译器优化时会忽略掉内联。长函数(10行以上,但是不同的编译器不同) 或者有递归的函数不适合使用作为内联函数, 因为调用的地方很多,展开后程序可能会一下变得很大。inline不建议定义和声明分离,分离会导致链接错误,因为inline被展开(在调用的地方),就没有函数地址了,链接就会找不到。有了inline ,就不需要使用c的宏,因为宏很复杂,很容易出错。release 版本不会建立栈帧。原创 2023-08-08 21:25:30 · 199 阅读 · 0 评论 -
【C++】常用到的“using namespace std;”到底是什么?
在初学C++时,在包含完头文件之后,我们常常会看到这么一句话:using namespace std;首先需要声明的是:它不是什么“固定动作”,不是必须这么写的。原创 2023-08-08 19:22:11 · 2880 阅读 · 0 评论 -
【数据结构】你真的认识“&”吗?它真的就只是“取地址”吗?或许你一直都在误解它。
注意,这里的&可不是表示取地址。如果你把它理解为取地址,那就在错误的路上狂奔,且一去不返了。相信大家在学习C语言时,也被指针折磨过不少。可能都出现过野指针等,这些失误让我们不胜其烦。其实,编写书籍的老师,使用“&”这个符号,就是为了减少指针的使用。“&”在这里,是C++中的“引用”。但是,这对于一些没有了解过相关语法的同志,那又成了一个坑。毕竟,C语言里面的“&”可是代表着“取地址”。那么,我们接下来就来好好说道说道,“&”到底是个什么东西。原创 2023-03-30 13:37:22 · 2429 阅读 · 0 评论 -
【C++】一篇博客带你速通 初识【默认成员函数】中的:构造函数、析构函数、拷贝构造
看完本篇文章,你将对C++中的默认成员函数的构造函数、析构函数、拷贝构造有一定的初步的理解。默认成员函数6个默认成员函数(特殊的成员函数): 如果我们不实现,编译器会自己生成一份。初始化和清理: 1. 构造函数主要完成初始化工作(类似init) 2.析构函数主要完成清理工作(类似destroy)拷贝复制: 1. 拷贝构造是使用同类对象初始化创建对象 2.赋值重载主要是把一个对象赋值给另一个对象取地址重载: 主要是 普通对象 和 const对象 取地址,这两个很少会自己实现原创 2023-02-01 14:39:14 · 155 阅读 · 1 评论