- 博客(20)
- 收藏
- 关注
原创 AVL 树
什么是AVL树?是最早发明的自平衡二叉查找树。一个AVL树要么是一棵空树,要么是一棵具备以下性质的二叉搜索树:它的左右子树都是AVL树。左右子树的高度差(绝对值)不超过1。
2024-10-30 20:25:25 769
原创 C++(十六) 继承 part2
C++(十五)继承 part1-CSDN博客书接上文,这篇将进一步介绍C++中继承体系的使用与细则。本文将从以下几部分内容完整地探讨继承体系派生类的默认成员函数(主要)基类中静态成员继承与友元多继承&复杂的菱形继承(粗略)一、派生类的默认成员函数首先先回忆以下默认成员函数:编译器在我们没有显式定义这些函数时,会自动为类生成的函数。多继承是指一个类同时继承多个基类的能力。一个子类可以从两个或多个基类继承成员数据和成员函数。这种机制允许子类同时具备多个基类的功能。多对一继承。
2024-09-09 15:37:40 720
原创 C++(十四)模板进阶
类模板特化(Class Template Specialization)是C++模板编程中的一个重要特性,允许针对特定的模板参数提供专门化的实现。在我们学习的模板的过程中,分为类模板和函数模板,函数特化很自然的也分为类模板特化函数模板特化。
2024-08-30 22:13:18 1151
原创 C++(十三) 反向迭代器
如果学过普通迭代器的小伙伴,那么对反向迭代器的使用也是手到擒来的,因为它用法和普通迭代器非常的类似。值得注意的是,它的底层实现也是值得我们去观察,讨论的。当你对反向迭代器解引用时,它实际上会先将内部正向迭代器递减一次(即指向前一个元素),然后返回该位置的值。因为反向迭代器的内部正向迭代器通常指向的是“下一个”位置。类(仅参考不是源码),这个类模拟了C++标准库中的反向迭代器的基本功能,方便大家理解(如果很难看懂就看懂怎么用就好了)换句话说,反向迭代器从容器的末尾开始,逐步向前移动,直到到达容器的开头。
2024-08-30 10:18:11 1281
原创 C++(十二)优先级队列 Priority_queue
priority_queue类的模板相较于queue是更复杂一点的,也是我们学习的难点:(源定义)template<class T,... ...上面的源码中类模板给了缺省值:默认容器是vector,默认生成的是大堆注意:Compare = less<> 是大堆template<class T,... ...T:数据类型Containter(容器):使用什么容器,(结合缺省值来看:默认容器是vector<T>)Compare(比较):建大堆还是小队。
2024-08-26 21:35:39 779
原创 C++(十一)适配器 栈和队列——stack & queue + deque
时,可以直接在栈中使用构造函数参数创建对象,避免了临时对象的创建。(简而言之:当有自定义类型再考虑使用emplace)上面介绍的已经是stack的绝大多少使用内容了,剩下的一些冷门一点的函数,这里不作介绍,大家感兴趣可以去参考网站上查看了解详细用法。2.2queue。
2024-08-26 00:15:40 862
原创 C++(十) list
频繁的随机访问频繁在容器的尾部添加或删除元素vector会表现得非常高效相对较少的中间插入和删除vector在中间插入和删除数据效率较低(因为需要挪动后面全部数据)内存连续性频繁的中间插入和删除,list支持在 O(1) 时间内在链表的任意位置插入或删除元素 (不需要挪动后面数据)迭代器的稳定性,插入或删除元素不会使现有的迭代器失效(除非删除了迭代器指向的元素)不需要随机访问,list不支持随机访问,可以遍历链表但效率低避免内存重新分配,每个元素都是独立分配的节点,因此在插入新元素时不需要像。
2024-08-23 03:11:58 1068
原创 C++(九) (STL)Vector
C++ 标准模板库(Standard Template Library,简称 STL)是 C++ 标准库的重要组成部分,提供了一套常用的模板类和函数,用于数据存储、操作和算法的实现。STL 是 C++ 强大的基础库,使得开发者能够高效、灵活地处理复杂的数据结构和算法。注:string在STL之前创造,所以严格来说string不属于STL,但是STL的容器设计的风格也参考了string(或说保持风格统一),所以在我们学习过程中会感觉STL的容器会有string的影子。
2024-08-22 02:47:26 949
原创 c++(八) string
string简单点理解就是C++在库中帮我们定义好的类,我们只需要学会用就好了。string在C++ 标准库中用于处理字符串。相对于 C 语言中的 C 风格字符串(以'\0'结尾的字符数组),提供了更多的功能,并且更安全、易用。里面对string操作函数都有详细的介绍。
2024-08-21 19:07:05 882
原创 C++(七)模板
什么是模板?模板可以看作是函数或类的蓝图。与其指定具体的数据类型(如int或double),你可以使用一个占位符(通常称为“模板参数”),这个占位符在使用模板时被替换为具体的类型。是一种编程范式,它允许编写代码时使用类型参数,从而使得代码能够处理多种数据类型而不需要重复编写相似的代码。通过泛型编程,开发者可以编写更加通用、可复用的代码,提高代码的灵活性和可维护性。在C++中,泛型编程主要通过模板来实现。模板是一种编译器机制,它允许在编写函数或类时使用类型参数。
2024-08-21 00:39:26 775
原创 C++(六)内存管理
1.动态申请内置类型的数据时new/malloc除了用法上面,其他方面没什么区别2、动态申请自定义类型的数据new/malloc除了用法上面,还有一个中大区别,new和delete会调用构造函数初始化,析构函数清理。
2024-08-20 22:46:33 260
原创 C++(五)类和对象part 3
之前实现构造函数时,初始化成员变量主要使用函数体内赋值,构造函数初始化还有一种方式,就是初始化列表。具体写法:(在构造函数后)出现一次列表初始化总结:每个构造函数都有初始化列表:(只是显示写和不写的区别)每个成员都要走初始化列表1、在初始化列表初始化的成员 (显示写)2、没有在初始化列表的成员 (不显示写)a、声明的地方有缺省值用缺省值b、没有缺省值的情况:x:内置类型,不确定,看编译器,大概率是随机值y:自定义类型,调用默认构造,没有默认构造就编译报错。
2024-08-13 02:08:45 841
原创 C++ (四) 类和对象part 2
1.类中内置类型需显性实现构造函数,编译器不处理2.类中自定义类型,可不显性实现构造函数,编译器会自动调用此自定义类中的构造函数3.析构函数详解1、一般情况下,有动态申请资源,就需要显示写析构函数释放资源2、没有动态申请的资源,不需要写析构3.需要释放资源的成员都是自定义类型,不需要写析构4.拷贝构造函数4.1拷贝构造的概念拷贝构造函数:如果一个构造函数的第一个参数是自身类类型的引用,且任何额外的参数都有默认值,则此构造函数也叫做拷贝构造函数,也就是说拷贝构造是一个特殊的构造函数。
2024-08-10 22:41:40 536
原创 C++ (三) 类和对象part 1
在以往学习的C语言中,有结构体定义,在C++中把结构体升级成了类,并引入新的关键字关键字:class(类)class和struct在内存对齐方面基本相同:1.第一个成员在与结构体偏移量为0的地址处。2.其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。注意:对齐数=编译器默认的一个对齐数 与 该成员大小的较小值。Vs中默认的对齐数为8结构体总大小为:83.结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。
2024-08-08 19:30:19 589
原创 C++ (二)
关键字:inline内联函数的特点:1)适用于短小且频繁调用的函数2)inline对于编译器仅仅只是一个建议,最终是否成为内联,编译器自己决定(一般 如果函数较长或者有递归迭代得会被编译器判为普通函数)3)改善宏可读性差、不能调试的缺点。
2024-08-07 23:12:49 127
原创 C++(一)
为解决c中命名冲突问题C++中引入:命名空间(关键字:namespace)后面跟命名空间的名字,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。namespace本质是定义出一个域,这个域跟全局域各自独立,不同的域可以定义同名变量,不同的域(可以理解成空间)。C++中域分为函数域影响的是编译时语法查找一个变量/函数类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。C++标准库都放在一个叫Std(standard)的命名空间中。
2024-08-07 22:52:38 992
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人