- 博客(54)
- 收藏
- 关注
原创 【Linux】调试器gdb/cgdb的使用
Linux下我们编译好的代码是无法直接进行调试的,gcc/g++的默认工作模式是release模式,,本篇将介绍一下它的使用。
2025-08-06 16:19:35
827
11
原创 【Linux】基本指令
Ubuntu:快速按两下,具有 命令补全 和 档案补⻬ 的功能linux中的是 / ,win是 \。路径的最后一个文件(如上图的lesson2),可能是普通文件,也可能是一个目录,我们不确定,但我们能确定最后一个文件。
2025-07-19 17:08:28
781
13
原创 【C++】unordered_set和unordered_map的实现
由于Key不能取模的问题,我们设计了一个仿函数来解决。但是这是在底层实现的,也就是哈希表这层,不好控制,所以我们要把对Hash这个仿函数的控制转移到上一层,也就是unordered_set和unordered_map这层。做法就是把这里的缺省给去掉,然后加在Unordered_Set和Unordered_Map类模板上。这里增加了一个模板参数后,其他相应的地方也要改。unordered_set和unordered_map的实现就到这里,我们下篇见~
2025-07-09 18:37:07
722
16
原创 【C++】哈希表的实现(链地址法)
中我们介绍了一个哈希函数:除法散列法(除留余数法),还有一个处理哈希冲突的方法:开放定址法中的线性探测。本篇继续讲解一些别的哈希函数和处理哈希函数的方法,以及如何用实现这个哈希表。
2025-06-23 22:44:13
895
10
原创 【C++】哈希表的实现(开放定址法)
哈希(hash)⼜称散列,是⼀种组织数据的⽅式。从译名来看,有散乱排列的意思。本质就是通过哈希函数把关键字Key跟存储位置建⽴⼀个映射关系,查找时通过这个哈希函数计算出Key存储的位置,进⾏快速查找。哈希表是通过哈希这种方式设计出来的一种存储数据的结构。
2025-06-20 22:13:58
1210
8
原创 【C++】unordered_map和unordered_set的使用
unordered_set的声明如下。Key就是unordered_set底层关键字的类型。unordered_set默认要求Key⽀持转换为整形,如果不⽀持或者想按⾃⼰的需求⾛可以⾃⾏实现⽀持将Key转成整形的仿函数传给第⼆个模板参数。unordered_set默认要求Key⽀持⽐较相等,如果不⽀持或者想按⾃⼰的需求⾛可以⾃⾏实现⽀持将Key⽐较相等的仿函数传给第三个模板参数unordered_set底层存储数据的内存是从空间配置器申请的,如果需要可以⾃⼰实现内存池,传给第四个参数。
2025-06-16 21:19:36
1089
9
原创 【C++】红黑树的实现详解
本篇来详细说一下红黑树。红⿊树是⼀棵⼆叉搜索树,AVL树是通过平衡因子控制树的平衡,红黑树就是通过颜色控制平衡,听起来比较抽象,但是这比AVL树学起来简单一点点。
2025-06-09 21:39:13
1001
11
原创 【C++】map和multimap的常用接口详解
insert的返回值也是pair,这里就出现两个pair,一个是前面说过的,pair存的是key/value,insert的返回值的pair存的是一个迭代器和bool值,因为insert可能插入成功,也可能失败。此时 it 就是西瓜的迭代器,it的first是string,就是这个“西瓜”,就是key,it的second是int,就是value。返回值是it的second,it就是苹果的迭代器,苹果的first是string,就是这个“苹果”,就是key,苹果的second是int,就是value。
2025-05-19 16:51:34
1524
14
原创 【C++】set和multiset的常用接口详解
2. set系列的使⽤前⾯我们已经接触过STL中的部分容器如:string、vector、list、deque、array、forward_list等,本篇文章将介绍一下map和multiset的使用。在介绍map之前我们先简单介绍一下什么是序列式容器和关联式容器。前⾯我们已经接触过STL中的部分容器如:string、vector、list、deque、array、forward_list等,这些容器统称为序列式容器,因为逻辑结构为线性序列的数据结构,两个位置存储的。
2025-05-15 17:43:44
1081
15
原创 【C++】多态详细讲解
多态是⼀个继承关系下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为。⽐如Student继承了Adult。Adult对象买票全价,Student对象优惠买票。实现多态还有两个必须重要条件:必须是基类的指针或者引⽤调⽤虚函数被调⽤的函数必须是虚函数,并且完成了虚函数重写/覆盖。说明:要实现多态效果,第⼀必须是基类的指针或引⽤,因为只有基类的指针或引⽤才能既指向基类对象⼜指向派⽣类对象;第⼆派⽣类必须对基类的虚函数完成重写/覆盖,重写或者覆盖了,基类和派。
2025-02-05 22:21:36
1343
14
原创 【C++】详细讲解继承(下)
本篇来继续说说继承。上篇可移步至1.继承与友元友元关系不能继承,也就是说基类友元不能访问派⽣类私有和保护成员。像上面的代码,Fun函数只能访问Same基类的成员变量_name,_stuid是访问不到的。解决方法就是在派生类Student里面也加上友元声明,就可以了。
2025-01-24 22:34:11
1101
10
原创 【C++】详细讲解继承(上)
继承机制是⾯向对象程序设计使代码可以复⽤的最重要的⼿段。我们前面接触到的都是函数层次的复用,遇到过的类层次的复用有模板,而继承是类层次的一种新的复用。继承允许我们在保持原有类特性的基础上进⾏扩展,增加⽅法(成员函数)和属性(成员变量),这样产⽣新的类,称派⽣类(或子类)。假如现在我们模拟校园环境,设计老师(Teacher)和学生(Student)两个类。老师和学生都有姓名、电话、地址、年龄等成员变量,都有身份认证相关成员函数。
2025-01-23 18:32:33
1807
8
原创 【C++】模板(进阶)
模板参数可以是类型形参,也可以是非类型形参。类型形参就是我们目前接触到的一些模板参数。//类型模板参数非类型模板参数就是用一个常量作为模板的参数,在模板中可以将该参数当作常量使用。//N为非类型模板参数template<class T, size_t N = 10> //N给缺省值template<size_t N> //N没给缺省值比如说我们要弄一个数组长度是固定的栈。//定长数组//...在使用的时候就可以传想要的N的值。int main()
2025-01-21 22:46:20
1131
11
原创 【C++】优先级队列以及仿函数
因为优先级队列就是堆,堆的底层是数组,所以优先级队列的默认适配器也是数组。需要用到访问下标的,数组一定是最好的选择。不了解堆的,建议先看下面这篇博客。【数据结构】堆的概念、结构、模拟实现以及应用在C++中优先级队列的相关接口就是如上这些。这里的top,如果大的值优先级高,也就是大堆,top返回的就是堆里面的最大值,如果是小的数优先级高,也就是小堆,返回的就是最小值。仿函数本质是一个类,这个类重载了operator(),这个括号重载的是函数调用时参数列表的括号,它的对象可以像函数一样使用。
2024-12-20 22:57:34
1419
20
原创 【C++】栈和队列的模拟实现(适配器模式)
不论是C语言还是C++,我们都用其对应的传统写法对栈和队列进行了模拟实现,现在我们要用新的方法模拟实现栈和队列,这个新方法就是适配器模式。C语言传统写法: C语言模拟实现栈 C++传统写法:C++模拟实现栈 stack满足只能在一端插入和删除就行,我们的底层用vector的话可以满足这个条件,底层用list同样也可以满足这个条件。既然如此,我们就不需要原生实现栈,直接用vector或者list封装转换一下不就好了。如果是用vector实现栈,就是数组栈,用list实现栈,就是链式栈。我们把栈的所有实现都放
2024-12-04 22:59:54
1561
26
原创 【C++】list模拟实现(万字详解)
我们迭代器里面实现了前置++和前置--,还需要实现后置++和后置--。在文件的lst_iterator类里面实现。
2024-11-26 22:15:38
1505
22
原创 【C++】list使用详解
list中的接口比较多,此处类似,只需要掌握如何正确的使用,然后再去深入研究背后的原理,已达到可扩展的能力。以下为list中一些常见的重要接口。
2024-11-19 22:22:16
1473
21
原创 【C++】vector模拟实现、迭代器失效问题(超详解)
vector会使用之后我们来模拟实现一下,通过对vector的模拟实现,我们来说一下迭代器失效问题。
2024-11-10 22:47:10
934
23
原创 【C++】vector使用详解以及动态二维数组
在使用时需要加头文件vector是一个标准的模板。不知道什么是模板去看【C++】模板(初识):函数模板、类模板-优快云博客第一个模板参数是要存的数据类型,第二个模板参数是一个空间配置器,就是一个内存池,现在不用关心他是什么。我们在vector学习时一定要学会查文档。string因为一些发展历史的原因,设计的接口比较多,比较冗余,vector相对来说就好很多,接口比string少很多。我们还是重点说经常使用的接口。
2024-10-28 22:18:54
3079
18
原创 【C++拓展】深拷贝的传统写法vs现代写法,你更喜欢哪个?
这篇呢是关于深拷贝的拓展知识。目前我们学到的知识中,会用到深拷贝就是和。传统写法的代码实现相信大家已经是手拿把掐,知道现代写法如何实现吗?我们来一起看看。(全文以我们前面模拟实现的string类为背景,文中函数的返回值类型最好是string的引用)
2024-10-27 09:30:00
793
22
原创 【C++】string类 (模拟实现详解 下)
我们接着上一篇继续对string模拟实现。从这篇内容开始,string相关函数的实现就要声明和定义分离了。
2024-10-24 00:25:22
863
21
原创 【C++】string类 (模拟实现详解 上)
我们不仅要会使用strng的接口,还要模拟实现,更深地理解strng的底层逻辑。这里我们最主要是实现string类的构造、拷贝构造、赋值运算符重载以及析构函数这些比较核心的接口。
2024-10-20 16:36:31
1088
33
原创 【C++】string类接口使用(万字详解)
来看(3)string (const string& str, size_t pos, size_t len = npos);它可以算是拷贝构造(2)的一个变型,和(2)对比着来看,(2)是全部拷贝,(3)就是拷贝一部分。从pos这个位置开始,拷贝len的长度过去。//从下标是6的位置(w),拷贝5个字符如果len比剩余字符大,不会报错,会默认拷贝到字符串结束。不传第三个参数,也是默认拷贝到字符串结束。我们可以点进这个npos看一下是什么。这里想表达的意思就是,字符串有多长取多长。
2024-10-16 09:00:00
1369
38
原创 【C++】模板(初阶)
也可以用typename)class 类模板名//类内成员定义比如说我们写一个栈Stack的一部分。public:Stack(int n = 4) //构造,_size(0){}~Stack() //析构{}private:T* _arr;int _size;这里的Push压栈时,空间不够我们要扩容,扩容怎么写?直接手动扩容,不用realloc那些函数了。步骤如下。if (_size == _capacity)//当空间不够时//手动扩容//原数据拷贝到新空间。
2024-10-09 15:44:36
1231
17
原创 【C++】内存管理:内存分布、new/delete
new和delete最主要的是为了让自定义类型用起来方便。拿下面这个A类举例。class Apublic:A(int a = 0) //构造:_i(a)A(const A& a) //拷贝构造~A() //析构private:int _i = 1;new一个A类的对象,会直接自动调用它的构造函数,delete时,会直接调用析构函数。delete p1;delete p2;如果我们想弄一个链表出来,也比在C语言里简单。struct ListNode //链表的一个节点。
2024-09-28 15:57:12
900
13
原创 【C语言】动态内存管理:malloc、calloc、realloc、free
本篇介绍一下C语言中的malloc/calloc/realloc。使用这些函数。malloc/calloc/realloc申请的空间都是的。
2024-09-28 15:54:44
1232
15
原创 【C++】类和对象(下)相关练习
题目要求和,但是像循环,递归,求和公式这样的方法都不让用,这种情况下我们最先想到的就是static成员变量的使用。我们每创建一个类对象就会调用一下构造函数,加上static修饰后出局部作用域不会销毁,这给我们提供了一个思路。我们先重新创建一个Sum类,成员变量是静态成员变量,成员函数一个是对调用次数进行累加的,一个是返回最终结果的静态成员函数。
2024-09-22 09:30:00
593
17
原创 【C++】类和对象(下):再探构造函数、类型转换、static成员、友元、内部类、匿名对象、拷贝对象时编译器的优化
的地方。我们有成员变量的声明,对象的定义,那成员变量在哪里定义?就在初始化列表。
2024-09-22 09:00:00
845
15
原创 【C++】类和对象(中):类的默认成员函数,构造函数、析构函数、拷贝构造函数、运算符重载
这篇我们继续学习C++类和对象部分,大概会说一下类的一些默认成员函数,构造函数、析构函数、拷贝构造函数、赋值运算符重载这些知识。
2024-08-10 22:58:42
1187
16
原创 【C/C++】C语言和C++实现Stack(栈)对比
我们初步了解了C++,也用C语言实现过栈,就我们当前所更新过的有关C++学习内容以栈为例子,来简单对比一下C语言和C++。
2024-08-05 23:00:07
710
15
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人