c++
文章平均质量分 90
creative_mind
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
相关二叉树进阶面试题的讲解?看这一篇足矣
【代码】相关二叉树进阶面试题的讲解?看这一篇足矣。原创 2024-09-06 22:08:30 · 352 阅读 · 0 评论 -
特殊类设计(5个)与类型转换
引子:在生活中我们经常有不同类的需求,因此我们有了特殊类的设计(有很多种模式等)。由于类型需求不同我们有了类型转换。今天我们就来略讲略讲一下这方面的知识。特殊类设计(5个)注意:关键字:explicit--防止隐式类型转换,final--该类不能被继承一,设计一个类,不能被拷贝思路:直接使用c++11新增知识delete,禁掉拷贝构造与赋值,或放到私有private中区,只声明不实现。原创 2024-08-28 11:53:43 · 992 阅读 · 0 评论 -
c++异常处理(c++11版)与智能指针 SmartPtr 的应用(主讲shared_ptr浅实现)
引子:找C语言的异常时,你是否会被奇怪的错误码或程序终止报错而感到无奈,对找不到错误在哪的心烦?在害怕内存泄漏时,你是否每一步,每一句代码都要仔细分析,在用完之后进行资源空间的释放?你是否......,今天我们讲的c++异常处理(c++11版)与智能指针的应用(主讲shared_ptr浅实现),希望可以帮助你原创 2024-08-27 12:59:30 · 996 阅读 · 0 评论 -
可变参数模板与包装器
。抱歉:铁汁们,最近在做兼职,积累社会经验,多有拖欠,请多多包涵(抱拳)引子:接上回我们讲了C++11的几种新增,今天就来接着讲C++11中比较有用的二个东西可变参数模板与包装器。可变参数模板:当我们进行cout来打印时或cin来进行输入时,我们发现我们打印使用任意数量好任意数量类型的东西,你是否会思考为什么呢?其实都是可变参数模板的功劳,那何为可变参数模板呢?原创 2024-08-21 23:36:01 · 914 阅读 · 0 评论 -
C++11中的左右值引用(略带复习)
引子:我们在之前学过,auto(底层为迭代器),范围for,{}初始化(可以省略=),initializer_list,decltype,nullptr(Null字面上为0),arrray(与数组相比,对于出错的处理不同),forward_list(与普通的相比少一点空间),还学过unordered_map与unordered_set(底层为哈希表,详见我前一篇封装)新容器等内容,这些其实是C++11新增的内容,今天我们就来讲一讲另一个C++11的内容——左右值的引用!原创 2024-08-17 12:36:07 · 884 阅读 · 0 评论 -
异曲同工之妙,哈希封装的set与map(包含测试代码)
话不多说我们直接上代码,请君自行测试。原创 2024-08-15 20:21:51 · 873 阅读 · 1 评论 -
(小白易通)判断极大数据中一个数是否存在的唯一真神,哈希--位图
是一种使用位图(Bitmap)来存储哈希表中元素存在性的数据结构。位图是一种数据结构,它使用位数组来表示数据,每个位代表一个元素的存在或不存在。在哈希位图中,哈希函数被用来将键映射到位图中的一个位上。如果该位为1,则表示对应的键存在,如果为0,则表示不存在。C/C++没有对应位的类型,只能看int/char这样整形类型,我们再通过位运算去 控制对应的⽐特位。⽐如我们数据存到vector中,相当于每个int值映射对应的32个值。原创 2024-08-10 23:01:23 · 463 阅读 · 0 评论 -
哈希初步结构:闭散列与开散列(代码部分)
ht.insert({ "sort", "排序" });ht.insert({ "left", "左边" });ht.insert({ "sort", "排序" });ht.insert({ "left", "左边" });//在原有的数据里面已经有这个了,要确保唯一性。//负载因子为1时进行扩容。//即size与数据点相等。原创 2024-08-10 15:36:44 · 1085 阅读 · 0 评论 -
略谈set与map的pair封装与进入哈希
一,哈希是一种数学函数,它接受一个输入(或“消息”),然后返回一个通常更小的固定大小的输出,这个输出称为“哈希值”或“哈希码”。映射:哈希思想通过哈希函数将任意长度的数据映射到固定长度的哈希值。这个映射过程是单向的,即从数据到哈希值是容易的,但从哈希值回溯到原始数据几乎是不可能的。快速性:哈希函数的设计旨在快速计算,以便在大数据集中实现高效的数据访问。均匀分布:理想情况下,哈希函数应该能够将输入数据均匀地分布在哈希值空间中,以减少冲突并提高查找效率。原创 2024-08-09 14:28:19 · 1410 阅读 · 1 评论 -
红与黑之歌,map与set的底层----红黑树(自实现)
我们在学习avl搜索二叉树时,知道avl是高度差不超过1的,因此是“绝对平衡的”,那有没有一种“接近平衡”的树呢?让它在这方面轻松一点,更加高效一点?答案是有的,set与map的底层就给出了答案--红黑树,红黑树是一种自平衡的二叉搜索树,它在计算机科学中被广泛使用,特别是在需要频繁插入和删除操作的数据结构中。红黑树的名称来源于它的节点颜色,可以是红色或黑色。这种数据结构能够保证在任何情况下,从根到叶子的最长路径不会超过最短路径的两倍长。原创 2024-08-08 14:55:06 · 1245 阅读 · 0 评论 -
avl树自实现(带图),探讨平衡因子与旋转
AVL树是一种自平衡的二叉搜索树,它的名字来源于它的发明者Adelson-Velsky和Landis。AVL树的特点是任何节点的两个子树的高度(或深度)最大差异为1。这种平衡特性确保了树的查找、插入和删除操作都能在对数时间内完成,即时间复杂度为O(log n)。当向二叉搜索树中插入新结点后,如果能保证每个结点的左右 子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均 搜索长度。原创 2024-08-05 14:49:49 · 664 阅读 · 0 评论 -
要 set 还是 map? 我全要
总的来说有以下几点:元素唯一性:set中的每个元素都是唯一的,不允许重复。如果尝试添加一个已经存在的元素,大多数情况下,这个操作会被忽略。无序性:虽然你提到了"按照一定次序存储元素",但实际上大多数编程语言中的set并不保证元素的存储顺序。它们通常不按照元素的添加顺序或任何特定的顺序来存储元素。元素作为键:在某些编程语言中,如C++的std::set,元素既是键也是值,因为set是基于键值对的集合,但键和值是相同的。不可修改性:set中的元素通常是不可修改的,即一旦元素被添加到set中,就不能更改它的值。原创 2024-08-03 15:43:15 · 910 阅读 · 0 评论 -
震惊,搜索二叉树告诉我们不要生二胎?本篇(带图)让你轻松拿下
set的底层实现通常依赖于哈希表(Hash Table)或平衡二叉搜索树(如红黑树)。以下是两种常见的实现方式有序性:对于树中的每个节点,其左子树上的所有节点的值都小于该节点的值,其右子树上的所有节点的值都大于该节点的值。唯一性:树中没有重复的节点。原创 2024-07-20 15:46:22 · 731 阅读 · 3 评论 -
接上一回C++:补继承漏洞+多态原理(带图详解)
菱形继承:菱形继承是多继承的一种特殊情况。菱形继承有数据冗余和二义性的问题如下图:西红柿,里面就有二个植物的属性,这与我们常识不符。原创 2024-07-11 20:21:07 · 941 阅读 · 1 评论 -
vector的自实现(迭代器失效问题)与继承续讲
删除pos位置元素后,pos位置之后的元素会往前搬移,没有导致底层空间的改变,理论上讲迭代 器不应该会失效,但是:如果pos刚好是最后一个元素,删完之后pos刚好是end的位置,而end位置是 没有元素的,那么pos就失效了。比如:resize、reserve、insert、assign、 push_back等,也就是说vector底层原理旧空间被释放掉, 而在打印时,it还使用的是释放之间的旧空间,在对it迭代器操作时,实际操作的是一块已经被释放的 空间,而引起代码运行时崩溃。// 指向有效数据的尾。原创 2024-06-27 18:14:12 · 888 阅读 · 0 评论 -
名侦探李先生第一话:谁是真正的凶手(只出现一次的数字相关题解(力扣)+位操作符回忆)
逗号表达式:从左向右依次执行,整个表达式是最后一个表达式的结果!说明a的二进制最低位是1;说明a的二进制最低位是0;按位或|:只要友谊就位1,全为0才为0;按位与&:有0就为0,全1才为1;按位异或^:相同为0,不相同为1;左移:逻辑右移和算数右移。按位取反~:1为0,0为1;正整数原,反,补码都相同。原码也可以用补码+1表示。原创 2024-06-24 23:02:43 · 1026 阅读 · 1 评论 -
deque的知识+每日一题:栈的压入,弹出序列+
栈是一个“后进先出”或“先进后出”的顺序存储结构。入栈的顺序规律是排在前面的先进,排在后面的后进。出栈的顺序规律是排在前面的先出,排在后面的后出。原创 2024-06-20 22:33:27 · 786 阅读 · 0 评论 -
c++模板,特化,仿函数,继承(复习专用)
c++模板,特化,仿函数,继承(复习专用)原创 2024-06-17 17:02:57 · 693 阅读 · 2 评论 -
那些年我与c++的叫板(一)--string类自实现
/注意char * strcpy ( char * destination, const char * source );//为深拷贝,因为如果浅拷贝的话,共用一块空间,那结果可想而知。//只析构_str上的资源。//注意pos=0时,对应的值为size_t类型,要int转。if (this!= &s)//排除等于自身的情况。// len大于前面字符个数时,有多少删多少。// len大于后面剩余字符,有多少取多少。//本string简单实现,代码量小,故直接写在声明中。//拷贝构造,可以隐式类型赋值。原创 2024-05-15 22:50:44 · 835 阅读 · 1 评论 -
那些年我与c++的交友日记(初识三):string类的(详细)常用函数与补充三种string遍历方式
(只可意会不可言传啊,苦笑)原创 2024-05-04 00:18:35 · 716 阅读 · 4 评论 -
那些年,我与c++的交友日记(初识二):(保姆级教学)三大重要默认函数与栈的实例(c++的受益者)
注意:一个类只有一个构造函数与析构函数,任何说有二个构造函数或二个析构函数都是错的!我总结以下几个原则!1,构造顺序是按照语句的顺序进行构造,析构是按照构造的相反顺序进行析构!2,对象析构要在生存作用域结束的时候才进行析构!3:类的析构函数调用一般按照构造函数调用的相反顺序进行调用,但是要注意static对象的存在, 因为static改变了对象的生存作用域,需要等待程序结束时才会析构释放对象!4,全局对象先于局部对象进行构造,局部对象按照出现的顺序进行构造,无论是否为static!原创 2024-04-11 23:33:11 · 860 阅读 · 4 评论 -
c++支持重载函数而c不支持,在翻译环境中的解释
包括:1,处理以# 开头的指令 , 比如拷贝 #include 包含的文件代码,#define 宏定义的替换 , 条件编译等,就是为编译做的预备工作的阶段。是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同,常用来处理实现功能类似数据类型 不同的问题。1,预定符号,_ _FIEL_ _路径,_ _DATE_ _日期,_ _TIME_ _时间 _ _LINE_ _行号。如上,就是重载了,在c中是不支持的,在c++支持!原创 2024-04-01 18:14:07 · 994 阅读 · 2 评论
分享