C++
文章平均质量分 79
大白同学421
C++方向持续学习中
我的gitee账号:https://gitee.com/da-bai-classmate
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【C++】C++11介绍(Ⅱ)
C++98设计的一个智能指针叫 auto_ptr ,它的特点是在拷贝时把被拷贝对象的资源管理权交给拷贝对象,但这样可能会使被拷贝对象悬空,从而报错。默认生成的移动构造/移动赋值重载,对于内置类型成员会执行逐成员按字节拷贝,自定义类型成员,则需要看这个成员是否实现移动赋值,如果实现了就调用移动赋值,没有实现就调用拷贝赋值。如果你没有实现移动赋值重载函数,且没有实现析构函数、拷贝构造、拷贝赋值重载中的任意一个,那么编译器会自动生成一个默认移动赋值。是一个通用的函数包装器,可以存储、复制和调用任何可调用对象。原创 2025-09-13 19:28:00 · 910 阅读 · 0 评论 -
【C++】C++11介绍(Ⅰ)
定义:能够出现在赋值运算符左侧的表达式,代表一个可标识的内存位置(有明确的存储地址),可以被修改或取地址。特点具有持久性(在内存中占据一定空间,生命周期较长)可以被赋值可以使用运算符取地址。原创 2025-09-12 09:15:01 · 1140 阅读 · 0 评论 -
【C++】用哈希表封装unordered_XX
所以相同的内容我就不再赘述了,本篇主要就是展示一下大致思路,代码部分偏多,大家可以一起试试实现一下哦!原创 2025-08-26 21:27:04 · 449 阅读 · 0 评论 -
【C++】哈希表的实现
当key是string/Date等类型时,key不能取模,那么我们需要给哈希表增加⼀个仿函数,这个仿函数支持把key转换成⼀个可以取模的整形,如果key可以转换为整形并且不容易冲突,那么这个仿函数就用默认参数即可,如果这个key不能转换为整形,我们就需要自己实现⼀个仿函数传给这个参数,实现这个仿函数的要求就是尽量key的每个值都参与到计算中,让不同的key转换出的整形值不同。当负载因子超过某个阈值(通常为0.7-0.8,下面代码实现用的是0.7)时,哈希表的性能会显著下降,此时需要进行扩容操作。原创 2025-08-13 20:05:28 · 638 阅读 · 0 评论 -
【C++】map和set的封装
因为map和set的元素类型不同,所以在比较大小时,所依据的key表示方法就不一样,为了解决这个问题,我们使用一个KeyOfT的类型来解决这个问题。前面我们已经实现了红黑树,直接将我们实现的红黑树拿过来使用,各位可以先看一下小编下面这篇博客内容,再和这篇文章联系起来。在map和set中key值都是具有唯一性的,所以我们需要保证key不能被修改,这个问题可以用const来解决。最后就是实现map中的 [ ] 功能。在map和set中直接套用就可以了。原创 2025-08-11 08:00:00 · 434 阅读 · 0 评论 -
【C++】红黑树实现
红黑树(Red-Black Tree)是一种自平衡的二叉搜索树,通过特定的规则确保树的高度始终保持在对数范围,从而保证插入、删除、查找等操作的时间复杂度为 O(log n)。原创 2025-08-06 14:32:56 · 480 阅读 · 0 评论 -
【C++】AVL树实现
AVL树是一种自平衡的二叉搜索树(BST),由G.M. Adelson-Velsky和E.M. Landis在1962年发明,是最早的自平衡二叉搜索树之一。AVL树在二叉搜索树的基础上增加了一个平衡条件:对于树中的任意节点,其左子树和右子树的高度差不超过1。这个高度差称为平衡因子(Balance Factor)。原创 2025-08-03 02:15:43 · 746 阅读 · 0 评论 -
【C++】set基本用法
通常 set 是用红黑树(一种自平衡二叉查找树)实现的,这保证了高效的查找、插入和删除操作。:set 中的元素总是按照特定的排序准则自动排序,默认是升序排列。:set 中的每个元素都是唯一的,不允许重复。原创 2025-07-29 01:32:37 · 337 阅读 · 0 评论 -
【C++】二叉搜索树
二叉搜索树(Binary Search Tree, BST)是一种二叉树数据结构,其中每个节点的值都大于其左子树中所有节点的值,且小于其右子树中所有节点的值。这一性质递归地适用于所有子树,使得中序遍历BST会得到一个严格升序的序列。如下图:这就是一个简单的二叉搜索树。原创 2025-06-07 17:14:27 · 484 阅读 · 0 评论 -
【C++】多态
●必须是基类指针或者引用调用虚函数●被调用的函数必须是虚函数,并完成了虚函数的重写/覆盖。原创 2025-06-01 19:50:30 · 1023 阅读 · 0 评论 -
【C++】继承
注意:派生类的operator=隐藏了基类的operator=,所以显示调用基类的operator=,需要指定基类作用域。1. public继承的派生类对象可以赋值给基类的指针/基类的引用。引用的是派生类中基类的部分,所以这个过程也有个形象化的叫法:切片或者切割。1. 派生类的构造函数必须调用基类的构造函数初始化基类的那一部分成员。使用关键字class时默认的继承方式是private,使用struct时默认的继承方式是public,不过最好显示的写出继承方式。一种特殊的多继承情况,形成菱形结构的继承关系。原创 2025-05-17 21:09:10 · 761 阅读 · 0 评论 -
【C++】模版详解
我们在实现功能相似但数据类型不同的函数或者类时,往往要写好几个相似的函数或者类,模版就可以先给我们提供一个框架,然后在编译时根据需要的类型使用这个框架。常用的模版有函数模版和类模版。一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有 目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。原创 2025-05-09 20:06:52 · 1090 阅读 · 0 评论 -
【C++】stack和queue的底层实现
适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设 计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。:STL 的 stack 和 queue 不是独立的容器,而是"适配器",它们基于现有容器(默认deque)提供特定接口。deque 支持高效的头部和尾部操作(O(1)时间复杂度)不需要像 vector 那样频繁扩容。内存使用比 list 更紧凑。原创 2025-05-05 19:55:12 · 300 阅读 · 0 评论 -
【C++】priority_queue底层实现
通过手动实现优先队列,我们可以深入理解:优先队列的基本操作仿函数在模板设计中的重要性这种底层实现的分析不仅帮助我们更好地使用标准库提供的优先队列,也为需要自定义优先级逻辑的场景提供了基础。原创 2025-05-04 20:30:00 · 425 阅读 · 0 评论 -
【C++】My_list实现
通过手动实现list,我们可以深入理解:双向链表的基本结构和操作迭代器如何封装底层指针操作STL容器的设计哲学模板编程在容器设计中的应用这种实现虽然简化,但涵盖了list的核心思想和关键实现技术。理解这些底层实现有助于我们更有效地使用标准库容器,并在需要时实现自定义的容器类型。希望本文能帮助你深入理解C++ list的底层实现原理!原创 2025-05-03 16:52:07 · 475 阅读 · 0 评论 -
【C++】string的底层实现
按照自己的理解实现了一下string的一些功能,主包自己弄的可能没有很规范,欢迎大家提出修改建议。原创 2025-04-22 10:51:11 · 170 阅读 · 0 评论 -
【C++】string详解
深拷贝不仅复制对象本身,还复制对象所拥有的所有资源,新旧对象拥有各自独立的资源副本。浅拷贝只复制对象本身,而不复制对象所指向或包含的资源,新旧对象共享相同的资源。原创 2025-04-18 15:44:23 · 979 阅读 · 0 评论 -
【C++】vector的底层实现
Vector 是 C++ STL 中最常用的顺序容器之一,它提供了动态数组的功能,能够自动管理内存并在运行时动态增长。本文将结合标准库实现和我自己实现的简化版 Vector,深入探讨 Vector 的内部机制。vector/vector/vector.h · 大白同学/C++的学习 - Gitee.com。原创 2025-04-25 14:04:58 · 427 阅读 · 0 评论 -
C++——类与对象(Ⅲ)
初始化列表是构造函数的一种初始化方式,使用方法是以一个冒号开始,接着是一个以逗号分割的数据成员列表,在每个“成员变量”后面跟一个放在括号中的初始值或表达式。用static修饰的成员函数,称之为静态成员函数,静态成员函数没有this指针,所以不能访问非静态的成员变量,只能访问静态的;引用成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进行初始化,否则会编译报错。友元函数声明可以再类的任何地方,不受类访问限定符的限制,但是习惯上,一般放在类中最上面的地方。原创 2025-03-15 18:29:32 · 855 阅读 · 0 评论 -
C++——类和对象(Ⅱ)
默认成员函数就是用户没有显示实现,编译器会自动生成的成员函数。一个类中,我们不写的情况下,编译器会默认生成下面几个默认成员函数。原创 2025-03-03 11:10:00 · 1135 阅读 · 0 评论 -
C++——类与对象(Ⅰ)
class是定义类的关键字,后面紧接着是类的名字,{}中是类的主体。类中的变量称为类的属性或成员属性;类的函数称为类的方法或者成员函数。●为了区分成员变量,一般习惯上成员变量前面或者后面会加一个_或者m,但这并不是强制的。C++中struct也可以定义类,C++兼容C中struct的用法,同时升级成了类,所以C++中的struct中可以定义函数,通常我们还是使用class定义类。定义在类中的成员函数默认为inline。原创 2025-02-11 15:20:05 · 384 阅读 · 0 评论 -
C++关键字namespace
在给变量命名时,要避免出现冲突,因此如何给变量命名都是程序员比较头疼的问题,而C++中的关键字namespace就是用来解决这个问题的。原创 2024-11-19 01:33:24 · 426 阅读 · 0 评论
分享