- 博客(15)
- 收藏
- 关注
原创 C++ 标准模板库(STL)——priority_queue和heap的使用和底层实现
本文介绍了C++ STL中的priority_queue和heap数据结构。priority_queue是容器适配器,默认使用vector作为底层容器,通过仿函数控制排序方式(默认大顶堆)。文章讲解了priority_queue的基本操作和使用方法,并详细分析了仿函数的实现原理。随后深入探讨了heap的底层特性,包括完全二叉树结构、大/小根堆定义以及核心操作算法(向下调整、向上调整和建堆),最后给出了大根堆的C++实现代码,包含插入、删除等基本操作。这些内容为理解和使用优先级队列和堆数据结构提供了实用指导。
2025-11-21 16:30:17
761
2
原创 C++ 标准模板库(STL)——stack、queue、deque的使用和底层原理
(node就是中控区数组的某个元素,当前元素的值是当前内存块的地址)
2025-11-19 19:36:31
566
3
原创 C++标准模板库(STL)——list的模拟实现
通过模板参数实例化,分别得到普通迭代器和 const 迭代器之前的 _list_iterator<T, Ref, Ptr> 是 “通用模板”(图纸),三个参数都是占位符。现在通过 typedef给模板传了 “具体参数”,直接生成两个 “专用迭代器类型"class listpublic://重命名变成我们熟知的普通迭代器和const迭代器//普通迭代器:Ref=T&,Ptr=T*// const迭代器:Ref=const T&,Ptr=const T*
2025-11-16 15:42:56
1082
4
原创 C++标准模板库(STL)——vector的使用
当插入元素后size>capacity时,空间不足,vector就会触发扩容。系统会分配一块更大的空间(按原容量的1.5或2倍扩充),并将原数据拷贝到新空间,释放旧空间。此时所有的迭代器、指针、引用都会失效,接下来我会粗略地介绍vector类一些常用成员,同时为了讲解方便,本文先以储存int类型为例介绍常用接口,如果大家想了解更多,可以点开上面的链接查阅。vector的使用和string非常相似,所以本文将减少文字说明,多用代码介绍。,vs下capacity是按1.5倍增长的,g++是按2 倍增长的。
2025-11-04 20:31:46
1043
4
原创 C++ string的使用
本文介绍了C++中string类的使用方法和相关特性。主要内容包括: auto关键字和范围for循环的用法,auto用于自动类型推导,范围for简化容器遍历。 string类的基本概念,它是动态字符数组,自动管理内存。介绍了string的多种构造方法。 string的容量操作,如size()/length()获取长度,resize()调整大小,capacity()查看容量等。 迭代器的使用,包括正向/反向遍历字符串的方法。 字符串修改操作,如operator[]访问字符,push_back()追加字符,ap
2025-10-30 15:41:36
585
4
原创 C++浅谈模板
摘要:本文介绍了C++模板机制在泛型编程中的应用。首先通过交换函数的重载问题引出泛型编程概念,随后详细讲解了函数模板的语法、原理及实例化方式(隐式/显式)。文章还探讨了模板函数与普通函数的匹配优先级规则,最后介绍了类模板的定义与实例化方法。模板机制通过类型参数化实现了代码复用,使开发者能编写与类型无关的通用代码,同时保持类型安全。
2025-10-28 17:37:56
307
5
原创 c/c++内存管理
本文介绍了C/C++内存管理的核心知识。主要内容包括:1)程序内存分区(栈、堆、代码段、数据段)及其存储内容;2)C语言动态内存管理方式(malloc/calloc/realloc/free)的使用和注意事项;3)C++特有的new/delete操作符及其与malloc/free的区别;4)定位new的用法及其在内存池中的应用;5)operator new/delete函数的作用机制。文章通过代码示例详细说明了各种内存管理方式的使用方法,并特别强调了内存泄漏和野指针的防范措施。
2025-10-28 17:04:20
897
原创 C++类和对象(二)
类外初始化静态成员是C++语法规定的特殊情况,这种初始化语法int A::_scount =0;是编译器认可的特殊形式,
2025-10-21 13:59:47
1001
1
原创 C++类和对象(一)
我们先来看一段类的定义class Datepublic:/成员函数_day = day;private:/成员变量,为了区分成员变量和其他变量,可以在成员变量前加_int _year;int _month;int _day;其中class为类的关键字,Date为类的名字,{}中为类的主体,最后以”;”结尾。类体中的变量称为成员变量,类中的函数称为成员函数定义在类里面的成员函数默认为inlineC++中struct也可以定义类(兼容C中struct的同时拓展功能)
2025-09-23 19:08:26
614
1
原创 C++入门(零C++基础也能看懂)
namespace后面跟命名空间的名字,再加上一对{},就是命名空间的格式了。{}中即为命名空间的成员,命名空间中可以定义变量、函数、类型等/test就是命名空间名/命名空间中可以定义变量、函数、类型int a = 0;int val;namespace本质是定义出一个域,这个域跟全局域各自独立,不同的域可以定义同名变量C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/ 类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。
2025-06-28 21:21:47
1009
3
原创 解决VS2022报错scanf问题
如scanf读取字符串时没有正确限制输入长度,可能会导致超出目标缓冲区的大小,从而引发安全漏洞,因此在VS中scanf函数被认为是不安全的函数。当然是有的,下面的方法也是我最推荐的。),在桌面上找到文件在记事本中打开,并输入。,找到VS相关路经的文件,右击该文件名称,再点击打开路径,此时来到以下界面。,在其他编译器(GCC、Clang、MinGW)仍在使用scanf。为了代码有更好的跨平台兼容性,也为了养成良好的编码习惯,小编推荐使用。可以重复上述步骤,但在VS打开桌面文件,在里面添加。
2025-03-18 17:41:26
604
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅