自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 详解STL中stack_queue为什么选择deque作为默认容器

vector的元素在内存中是完全连续的,而deque是由多个分散的“内存块”组成,这会造成哪些劣势呢,首先vector的随机访问是真正的O(1),直接通过首地址+偏移量计算,deque虽然也支持随机访问,但是底层实现上需要先计算元素在哪个内存块,再找块内的偏移量,实际效率略低(尤其是数据量巨大时),且vector的CPU缓存命中率更高(连续内存适合CPU预读),遍历速度通常比deque快。,这是优于vector的点,而list还得申请结点(带两个指针的额外内存),内存碎片多,开销更大,而。

2025-09-29 23:28:07 1098 8

原创 C++函数模板详解

函数模板不是一个实在的函数,编译器不能为其生成可执行代码。定义函数模板后只是一个对函数功能框架的描述,当它具体执行时,将根据传递的实际参数决定其功能。

2025-09-29 19:01:04 939 4

原创 初识string

(空串)");3.string s3(s2) (拷贝构造)第四种方法是将s2的字串给给s3,从下标为1的位置开始往后获取4个字符给s4,也就是说s4为ello,第三个参数有缺省值,不提供也可以,从第一个位置开始往后到结尾的字串都会给给s4(参数给负数或者大于s2长度的数也能达到同样的效果)给定一个const char*类型的字符串,将它的前n个字符给给s5,便如以上操作,如s5的字符串为hello(s6为十个#的字符串)

2025-09-12 21:14:15 842 6

原创 new/delete的原理以及和malloc/free的区别

1.malloc和free是标准库函数,行为固定,不可重载,new和delete属于操作符,operator new/operator delete可以被重载(全局或类内重载),能自定义内存分配逻辑。4.malloc的返回值为void* ,在使用中必须强制转换类型,存在类型安全差异,而new不需要,因为new后直接跟的是空间的类型。2.malloc申请空间时,需要手动计算空间并传递,new只需要在其后跟上空间的类型即可,如果时多个对象,[]中指定对象个数即可。会调用析构函数完成空间中资源的清理释放。

2025-09-04 03:08:42 294 3

原创 数据结构之八大排序算法

第一种直接选择排序是由首元素一一与后面的元素对比,把小的依次排到前面,从而达到升序的效果。这种是只把最小的数找出来放前面,那么是否能够找小的同时也找大的放在后面以提高排序效率呢?前面的快排使用了递归的方法以找基准值的方式排序,以下不再使用递归的方式,但是要借助一种数据结构——栈(栈功能在之前实现过了,这里直接使用,在文章末尾也会附上栈的实现代码)前四的排序算法在排序十万个数据的情况下仅仅需要十毫秒以内,从InserSort开始就需要至少1秒的排序时间,排在最后的BubbleSort甚至需要接近10秒。

2025-06-26 16:06:45 391

原创 二叉树OJ——递归的暴力美学

递归的暴力美学

2025-06-22 17:44:15 1394

原创 链式二叉树

二是最后一层的结点从左往右顺序依次排列。如果取队首结点取到了NULL,则结束循环,开始第二次循环,循环条件与第一次相同,如果二次循环取队首结点取到了非空结点,则可以判断不是完全二叉树,因为结点不是从左往右顺序分布的,如果取到NULL,则继续循环,直到队列为空都没有取到非空结点,则可以判断该二叉树是完全二叉树。初始化队列后将根结点放入队列,只要队列不为空就开始循环,取队首结点并打印,然后结点出队,如果该根结点的左右孩子不为空,则将其孩子也放入队列中,重复以上操作,全部打印并出队后,完成遍历结束循环。

2025-06-21 16:02:50 479

原创 二叉树之堆结构

从初步认识堆到能够构建堆,完成堆排序,并利用堆的思想解决TOP-K问题

2025-06-20 13:37:24 1063 1

原创 栈和队列代码实现及OJ

思路概括:运用数据结构——栈,遍历字符串,若是左括号则入栈,如果是右括号,则与栈顶的左括号匹配,如果匹配成功,栈顶的左括号出栈,更换新的栈顶,字符串也继续向后遍历,进行新一轮的比较;出栈:要用两个队列实现栈功能,我们知道队列满足先进先出,而栈是先进后出的,假设往一个队列里入队1、2、3、4,正常情况下出队也是按照相同的顺序,但是我们要实现先进后出的栈,因此4必须先出来,所以我们就要借助第二个队列,将前面三个数也就是前面size-1的数入队到第二个空队列中,然后剩余的一个保存后出队,最后返回保存的数即可。

2025-05-09 20:15:49 1523

原创 双向带头循环链表(双向链表)的实现

接下来会有一个误区,初学者可能会在这个时候直接令*pphead指针中的prev和next指向自身来完成初始化,因为此时还未申请空间,这会导致空指针的解引用从而引起空指针异常。直接传一级指针,保证窗口的统一性,然后循环遍历进行销毁操作,但是发现最后会剩下一个头节点无法销毁,因为传的是一级指针(plist的“值”而非“址”),因此调用完销毁函数之后,还得单独对plist进行处理,手动将它置空(plist = NULL),销毁后的plist也将不再使用。相比之下,第二种方法是较为合适的。因此个人较为推荐方法二。

2025-05-03 17:46:24 516

原创 链表基本功能实现+链表oj(下)

碾压链表OJ的视觉盛宴

2025-05-02 13:54:21 1733 2

原创 链表基本功能实现+链表oj(上)

【代码】链表基本功能实现+链表oj(上)

2025-04-30 09:26:36 165

原创 顺序表基本功能的实现 — 纯代码

【代码】顺序表基本功能的实现 — 纯代码。

2025-04-29 21:48:37 281

原创 如何合并两个有序数组?

和方法一相同的是,也会出现其中一个数组先遍历结束的情况,但不同的是,由于这是在num1上“原地”修改,如果是num2先遍历结束,是不是就意味着num2中的元素已经全部插入num1中并且排好序了?因此需要考虑其中一个数组遍历结束后另一个数组的剩余元素未插入到新数组的情况,此时就需要再单独使用两个while循环将num1或者num2剩余的元素放入新数组newnums中,就初步完成了数组的合并,最后将newnums中的所有元素移回num1数组中即可,别忘了free掉newnums的空间并且置空(NULL)。

2025-04-29 19:43:12 380

原创 比特为始,努力为剑,奋而求上

我个人是比较喜欢自学的,因此刚入学我就开始在b站寻找各种C语言的网课,在结合学长学姐的推荐下,我首次接触了比特——鹏哥C语言,对比了其他网课,鹏哥的课程给我的第一印象是 哇靠一节课居然有三个小时这么长!深入浅出通俗易懂,还涉及到了很多在校老师都不会讲的但是有很重要的知识点,也不是质疑学校的老师专业水平,只是一学期就这么几节课,根本讲不了太多内容,只能自己额外找时间尽量多学一点,现在是大一下学期,也是我正式入学比特的时间,我开始重视自己的学业,打算好好学,全部系统的学一遍。

2025-04-24 14:36:06 230

空空如也

空空如也

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

TA关注的人

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