自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 收藏
  • 关注

原创 特殊类设计

C++ 98:将 拷贝构造 和 赋值重载 只声明不定义且私有化。C++ 11:error C2280: “Copy_Ban::Copy_Ban(Copy_Ban &)”: 尝试引用已删除的函数核心步骤只有 3 条:创建对象:3. 请设计一个 只能在栈上创建对象 的类将构造私有化通过特定接口创建对象将 operator new (operator delete)封死创建对象:何时需要删除 ?你的类被设计成不可复制的(既不能被拷贝构造,也不能被赋值)。你的类包含了一些不允许复制的

2024-07-17 09:00:00 913 24

原创 C++ 智能指针

混淆:智能指针的出现,是为了。

2024-07-14 09:00:00 462 16

原创 包装器 std::function

是 C++标准库 中的一个通用;、绑定的成员函数、等。

2024-07-10 09:00:00 293 13

原创 lambda 表达式

传值捕捉时,mutable 可以取消参数的常性,使其在函数体内能被修改。不使用时,可以省略;,且 lambda表达式 的名称是编译器根据特定算法实时生成的、保证不重复。此处解释了,“为什么 lambda表达式 之间不能相互赋值”。:函数体的返回值类型,通常可以省略,由编译器自行推导。C++11 中,最简单的 lambda 表达式为。不需要传递参数时,可以连同。的方式不是类重载“函数调用运算符”吗?不可省略(即使参数列表为空)。通过以上场景,可以看出。,但它没有任何作用。

2024-06-20 09:30:00 419 20

原创 右值引用和移动语义

通俗来讲,可以出现在赋值语句左侧的,为左值;只能出现在赋值语句右侧的,为右值。左值能取地址,但右值不能。本文主要通过三个场景 —— 与移动构造、移动赋值、完美转发有关,讲解右值引用在实际场景中的作用及其相关的知识。右值通常也被形象的称为“将亡值”,代指赋值重载和拷贝构造过程中产生的临时对象。public:// 拷贝构造 -- 左值cout << "string(const string& s) -- 深拷贝" << endl;// 拷贝赋值。

2024-06-14 09:30:00 1138 19

原创 C++11 列表初始化(initializer_list),pair

的使用范围,使其可用于所有内置类型和自定义类型。是 C++11 引入的一个模板类型,用于处理一组。初始化或传递一系列相同类型的值。C++98 中,允许使用。

2024-06-09 08:30:00 524 17

原创 布隆过滤器

假设 “Tencent” 与 “Baidu” 映射到同一 pos2 ,删除 “Tencent” ,将无法再查询到 “Baidu”。Set("Tencent") ——> 经过一系列哈希函数的映射,对布隆过滤器底层数据结构上 pos1、pos2、... 等位置进行标记;所对应的 pos1、pos2、... ,那么即便没有插入 “Tencent” ,Test(Tencent)的结果仍然为。经这一系列哈希函数映射的、对应底层数据结构的位置,是否都被标记,得出结论。——> 换一个哈希函数,把该小文件。

2024-05-18 19:09:51 295 24

原创 位图和布隆过滤器:位图

在《和》 中提到过:哈希是一种思想,通过哈希函数将数据转化为一个或多个整型 —— 映射关系;通过这种映射关系,可以做到以 O(1) 的时间复杂度查找数据。本文即将介绍的和就是两个非常典型的哈希思想的应用成果,可以在的同时,。

2024-05-16 09:00:00 774 20

原创 unordered_map 和 unordered_set

unordered——,从表面上来看,与 map 和 set 不同之处就在于,unordered_map 和 unordered_set 无法保证插入数据是有序的;尽管如此,由于这两种容器内部封装了“哈希桶”,可以实现—— 这一优点与 map 和 set 相同。其实,在我们模拟过 map set 的基础上,再学习封装 无序map 和 无序set 实在简单。因此,。哈希哈希表 / 哈希桶。

2024-05-14 09:00:00 1127 17

原创 开散列哈希桶

通过 HashFunc 计算每个元素的哈希地址,哈希地址相同的元素所组成的子集称为 哈希桶,这些元素通过单链表链接在一起。。开散列的每个桶中存的都是发生哈希冲突的元素。

2024-05-13 08:45:00 393 10

原创 闭散列哈希表

哈希。

2024-05-11 09:00:00 968 14

原创 通过红黑树封装 map 和 set 容器

template // 与 list 迭代器处没有区别,Ref —— T& ,Ptr —— T*{}迭代器指向节点的右子树不为空时, operator++() 的下一个位置就是其右子树的最左节点。迭代器指向节点的右子树为空,意味当前节点所在的左子树已经全部访问完了,operator++() 的下一个位置是当前子树为左子树的最近祖宗节点。

2024-05-09 12:16:13 692 16

原创 红黑树(RBTree)认识总结

红黑树是一种二叉搜索树,与普通搜索树不同的是,在每个节点上增加一个“颜色”变量 —— RED / BLACK。通过对各个节点颜色的限制,确保从 根 到 NIL,没有一条路径会比其他路径长出两倍。

2024-05-07 08:30:00 639 18

原创 平衡二叉搜索树(AVL)旋转

单独开一章节介绍 RotateL 、 RotateR 及更复杂的 LR 和 RL 型旋转,更多是为了红黑树的旋转部分做铺垫;由于 AVL 树和红黑树发生旋转的判断标准不同 —— 分别为平衡因子和节点的颜色,两棵树左旋和右旋的在细节上会有一些差异,但从整体来看,二者的精神一致。关于如何快速记忆什么时候为左旋、右旋、或左右旋、或右左旋,有一个小技巧:当左树更高,需要向右调整高度,此时右旋;当右树更高,需要向左调整高度,此时左旋 … …

2024-05-06 08:00:00 566 8

原创 map::operator[] 底层大致介绍及与 map::insert() 区别

把该式的返回值结果记为 pair<Iterator_pair_val, bool>假设 map 中已经存在 pair<key1, value1>,需要对 insert 的返回值进行一系列操作,才能实现。调用 insert(pair<key1, value2>)为了方便后续讲解,把创建的。变量记为 pair_val。,因此在这种情况下,

2024-05-05 10:42:28 398 5

原创 模板进阶:非类型模板参数,特化

非类型模板参数,就是用一个常量作为 类/函数 的模板参数,在 类/函数 中可以被当成常量使用。一般情况函数模板无法实例化出满足要求的函数,我们通常给出具体实现——更简单、方便。首先给定一个 Date 类,并完善必要的函数及运算符重载,以便后续介绍相关概念。如果想要做到通过指针就能完成对日期大小的比较,则需要。全特化:将模板参数列表中所有参数都给明。下,Less(p1, p2) 是在。

2024-03-16 10:57:01 667 27

原创 C++ 反向迭代器的设计与实现

为了使我们的反向迭代器能快速用起来,优先实现 ++ , * , -> ,!= 等功能,其余以此类推。重载 ++--cur;--cur;return tmp;// 存在隐式类型转换 <--> ReverseIterator<Iterator>(tmp);“为什么前置++ 的返回值不能是 cur?error C2440: “return”: 无法从“Iterator”转换为“ReverseIterator<int *> &”重载 * :引入一个模版参数 Ref--tmp;

2024-02-29 13:10:45 657 15

原创 stack_queue:三个关键注意事项解析

使用过程中存在大量“头删”——pop_front(),用 vector 进行封装效率太低,故。就是一个仿函数——从根往叶子节点看,数值/优先级 越来越小,因此默认为大堆;的重载,故 priority_queue 不支持底层使用 list。时——_con[child] > _con[parent],要。—— 从根往叶子节点看,数值/优先级 越来大,则建小堆。为容器,在实例化创建对象时,我们可以传。,在插入和删除时,通常会涉及。实现,其实例化对象可以。queue 的原则是。

2024-02-03 08:00:00 448 18

原创 C++ STL中list迭代器的实现

list 的模拟实现中,重难点在于迭代器功能的实现,因此本文只围绕iterator及的设计进行介绍,其余如增删查改则不再赘述——在C语言的基础上,这些都非常简单。与 string / vector 不同,list 的节点原生指针不能通过简单的 ++ / * 等实现迭代器,因此我们需要节点指针封装自定义类型运算符重载,完成迭代器的设计。为了与 STL中list 进行区分,我们在创建的命名空间内实现。

2024-01-28 14:33:49 736 13

原创 解决 Linux git push 贡献者不同(没有出现绿点)的问题

【代码】解决 Linux git push 贡献者不同(没有出现绿点)的问题。

2023-12-22 08:00:00 1101 7

原创 【make/Makefile】Linux下进度条的设计与实现

Makefile 和 makefile 不区分大小写,但是一定只能是 “makefile”!!!make是一个指令,makefile是一个文件。使用 make 生成目标文件时,默认从上到下扫描 Makefile 文件,默认形成的是第一个目标文件——默认只生成一个。

2023-12-21 08:00:00 524 2

原创 MyString:string类的模拟实现

为了区分标准库中的string,避免编译冲突,使用命名空间 MyString。MyString。

2023-12-10 13:05:11 900 19

原创 387.字符串中的第一个唯一字符 —> `size()`

【代码】387.字符串中的第一个唯一字符 —> `size()`

2023-12-09 08:00:00 218 3

原创 string类重要接口(2):`+=`

string 类有两个尾插接口。则很好地弥补了,使用更加简便。

2023-12-08 08:00:00 245 2

原创 string类:`reserve()`,`resize()`详解

PS:reserve(size_t n) 为string预留空间,不改变有效元素个数;当 reserve 的参数小于底层空间总大小时,reserve 不会改变容量大小。n > capacity ——> 扩容+尾插size < n < capacity ——> 尾插n < size ——> 删除数据,只保留前 n 个​PS:resize() 在改变元素个数时,如果是将元素个数增加,可能会改变 capacity 的大小—— 、 这两种情况;如果是将元素个数减少,则不改变 capacity 的大小—— 的

2023-12-07 08:00:00 649 2

原创 模板初阶(2):函数模板的匹配原则,类模板的实例化

一个非模板函数可以和同名的函数模板同时存在。

2023-12-03 08:00:00 501 3

原创 迭代器 iterator

iterator。

2023-12-02 08:00:00 192 3

原创 模板初阶(1):函数模板,类模板

用不同类型的参数使用函数模板时,称为函数模板的实例化。

2023-11-25 08:00:00 459 11

原创 C/C++内存管理(2):`new`和`delete`的实现原理

int _top;return 0;new:开对象空间+调用构造函数delete:调用析构函数+释放对象空间T为某一种类new T1.调用函数申请空间2.在已申请空间上调用构造函数,完成对象的构造。delete1.调用析构函数,完成对象资源清理2.调用释放空间。new T[N]1.调用2.在过程中,实际调用完成对N。

2023-11-24 08:00:00 255 2

原创 C/C++内存管理(1):C/C++内存分布,C++内存管理方式

int _val;:_val(x){}int main()// 与`malloc`相比,`new`可以对自定义类型进行初始化delete p1;delete p2;return 0;在申请和释放自定义类型的空间时,new会调用构造函数,delete会调用析构函数。

2023-11-22 08:00:00 636 2

原创 拷贝对象时编译器的一些优化

在传参和传值返回的过程中,编译器会通过一些优化减少拷贝的次数。

2023-11-20 08:00:00 176 7

原创 类和对象(8):explicit,static成员,友元,内部类

的函数,

2023-11-19 17:40:38 219 32

原创 类和对象(7):初始化列表

以一个开始,用分隔的数据成员列表,每个“成员变量”后跟一个(),其中放初始值或表达式。// Date类,_day(day){}// Stack类public:,_top(0)private:int* _a;int _top;每个成员变量只能在初始化列表出现一次。只能初始化一次类中包含**引用成员变量const成员变量自定义类型成员(且该类没有默认构造函数时),必须在初始化列表进行初始化**。

2023-11-17 08:00:00 384 3

原创 类和对象(6):const成员,&/const &重载

用const修饰的成员函数,称为”const成员函数“。const修饰成员函数,实际上是修饰成员函数隐藏的this指针,表明在该成员函数中不能对类对象的任何成员进行修改。class Date。

2023-11-16 08:00:00 210 11

原创 类和对象(5):Date类详解

(暂不考虑 x < 0 的情况)等运算符,皆可都通过对。此处有一种重点,以**

2023-11-15 08:00:00 451 28

原创 类和对象(4):运算符重载 1

重点为运算符重载中关键的细节。

2023-11-14 08:00:00 326 20

原创 类和对象(3):拷贝构造函数

运行结果:调用Func函数时创建临时Stack类对象st,其中st._a与st1._a指向了同一块空间,这块空间在程序运行过程中会被销毁两次。

2023-11-12 18:38:44 178 31

原创 类和对象(2):构造函数,析构函数

默认构造函数,指可以不传参就直接调用的构造函数。,使用编译器生成的默认析构,如:Date类;,在对象整个生命周期内只调用一次。(局部变量的销毁由编译器完成),构造函数是一种特殊的成员函数,,如:Stack类。

2023-11-11 21:35:49 162 20

原创 类和对象(1):类,对象,this指针

在C++中,更喜欢用关键字 class定义类。// 类体:由成员函数和成员变量组成 };声明和定义全部放在类体中。PS:成员函数如果在类中定义,编译器会把其当作内联函数(是否展开取决于编译器)。类声明放在.h文件中,成员函数定义放在.cpp文件中。

2023-10-27 08:30:00 189 26

原创 基本指令(2):通配符,重定向,命令行管道

是否有办法,在不创建“临时文件”的情况下,获取到目标的十行数据?,大部分硬件设备都可以看做有读写方法,只不过有些方法可以为空。如何获取其中第80000 ~ 80010行数据?向文件中写入数据时,默认会先清除文件内容。进行文件写入(文件不存在时会自动创建)。如果想要在文件内容末尾追加写入,则需要使用。假设在当前工作目录下,已创建。以上两条指令,都可以做到。,先对其进行文件写入。

2023-10-25 19:00:08 637 16

解决WIn11画图问题

解决WIn11画图问题

2023-12-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除