- 博客(23)
- 收藏
- 关注
原创 C++--map和set
1. set是按照一定次序存储元素的容器2.在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改元素总是const),但是可以从容器中插入或删除它们。3.在内部,set中的元素总是按照其内部比较对象类型比较所指示的特定严格弱排序准则进行排序。4. set容器通过key访问单个元素的速度通常比容器慢,但它们允许根据顺序对子集进行直接迭代。5. set。
2024-08-19 12:14:49
790
原创 C++--二叉搜索树
问题:如果退化成单支树,二叉搜索树的性能就失去了。个结点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是结点在二。a、从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。在二叉搜索树中检索该单词是否存在,存在则拼写正确,不存在则拼写错误。插入和删除操作都必须先查找,查找效率代表了二叉搜索树中各个操作的性能。b、最多查找高度次,走到到空,还没找到,这个值不存在。叉搜索树的深度的函数,即结点越深,则比较次数越多。,统计成功后,给定单词就可快速找到其出现的次数,
2024-08-19 11:51:16
646
原创 C++--多态
1.多态概念多态的概念:通俗来说,就是多种形态,。2.多态的定义以及实现2.1虚函数虚函数:即被virtual修饰的类成员函数称为虚函数。2.2在继承中要1.必须通过基类的指针或者引用调用虚函数2.被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写2.3虚函数的重写虚函数的重写覆盖,称子类的虚函数重写了基类的虚函数。1.派生类重写基类虚函数时,与基类虚函数返回值类型不同。即基类虚函数返回基类对象的指针或者引用,派生类虚函数返回派生类对象的指针或者引用时,称为协变。
2024-07-09 20:08:13
299
原创 C++--继承(上)
1.1概念继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。1.2定义1.2.1格式。
2024-06-09 21:06:48
1020
原创 C++--模版进阶
模版参数不止类型,还有常量参数(浮点数、类对象以及字符串是不允许作为非类型模板参数的,)C++20支持double等内置类型,非类型的模板参数必须在编译期就能确认结果。我们知道写个比较大小的模版函数,一般人都是传对应类型的值,但是总有一些二般人传入的值比较奇怪如传入对应类型值的地址,所以我们就需要对模版进行特殊处理。一般情况下如果函数模板遇到不能处理或者处理有误的类型,为了实现简单通常都是将该函数直接给出。4. 函数形参表: 必须要和模板函数的基础参数类型完全相同,如果不同编译器可能会报一些奇怪的错误。
2024-06-07 10:23:22
901
原创 C++--priority_queue和仿函数
优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用priority_queue。优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的,其实就是个堆,默认是大根堆。所以我们写个大于小于逻辑的仿函数,并在创建priority_queue时传入此类即可。引入仿函数实现定义类型时就能决定大小堆。
2024-06-06 21:15:24
388
原创 C++--stack和queue
但是,deque有一个致命缺陷:不适合遍历,因为在遍历时,deque的迭代器要频繁的去检测其是否移动到 某段小空间的边界,导致效率低下,而序列式场景中,可能需要经常遍历,因此在实际中,需要线性结构时,大多数情况下优先考虑vector和list,deque的应用并不多,而目前能看到的一个应用就是,STL用其作 为stack和queue的底层数据结构。与vector比较,deque的优势是:头部插入和删除时,不需要搬移元素,效率特别高,而且在扩容时,也不需要搬移大量的元素,因此其效率是必vector高的。
2024-06-06 20:50:03
588
原创 C++--list
1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与非常相似:最主要的不同在于是单链表,只能朝前迭代,已让其更简单高效。4.与其他的序列式容器相比(arrayvectordeque)list通常在任意位置进行插入、移除元素的执行效率更好。5.与其他序列式容器相比,list和。
2024-05-31 09:48:51
972
原创 C++--vector
1. vector是表示可变大小数组的序列容器。2.就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3.与其它动态序列容器相比(),vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。比起list和forward_list统一的迭代器和引用更好。
2024-05-30 14:20:31
1096
原创 C++--string
c语言中虽然也有字符串,但是其与对应的函数是分离的,不符合c++中面向对象的思想。而且c++中的string类使用起来更方便、快捷。1. string是表示字符串的字符串类2.该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
2024-05-29 15:32:31
1134
原创 C++模版初阶&STL简介
class 类模板名// 类内成员定义标准模板库是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。
2024-05-21 17:19:43
881
1
原创 C&C++内存管理
在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与free不会。• new的原理1. 调用operator new函数申请空间2. 在申请的空间上执行构造函数,完成对象的构造• delete的原理1. 在空间上执行析构函数,完成对象中资源的清理工作2. 调用operator delete函数释放对象的空间• new T[N]的原理。
2024-05-05 15:39:27
1327
原创 C++类与对象(下)
比如上述Time类和Date类,在Time类中声明Date类为其友元类,那么可以在Date类中直接 访问Time类的私有成员变量,但想在Time类中访问Date类中私有的成员变量则不行。内部类是一个独立的类, 它不属于外部类,更不能通过外部类的对象去访问内部类的成员。内部类天生就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象参数来访 问外部类中的所有成员。友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend关键字。
2024-05-02 12:33:49
873
1
原创 C++类与对象(上)
C++更为主流的写法是使用class关键字来定义类//class后加类名//类体//类中的方法叫作成员方法//类中的变量叫作成员变量int age;类中的成员方法有两种声明定义方式:1.声明定义分离,假如类在.h中,且方法在类中只进行了声明,方法的定义在.cpp中,则.cpp除了需要包含.h之外,还需要在方法名前加上:(类会产生类域)。2.声明定义都在类中,编译器可能会把其当成内联函数。
2024-04-21 16:44:35
904
2
原创 C++入门基础(2)【函数重载、引用、内联函数、auto、范围for、nullptr】
在C++中,汇编指令里的函数名不仅仅只有函数名,还使用了函数的参数进行修饰,使用了参数进行修饰的函数名更加复杂,但也使得C++能支持函数重载。引用类型的变量不会创建一个新的变量,而是为另一个变量取一个别名,从语法层面上看,引用不会开空间,引用类型的变量和被引用的变量占用同一块空间。当引用作为函数的参数时,能起到类似指针的效果,若给一个函数传入大量参数,值传参需要浪费大量空间,引用则只需要取别名;同一作用域中同名的函数,且这些同名函数的参数个数不同或参数类型不同或参数顺序不同。
2024-04-20 17:59:02
745
1
原创 C++入门基础(1)【命名空间、输入输出、缺省函数】
当我们想定义一个命名空间时,需要使用namespace关键字。//namespace后加命名空间的名字,然后加一对{}即为命名空间//命名空间中可以定义类型、变量、函数int i;
2024-04-15 14:36:40
756
1
原创 五大排序(上半部分):插入排序,选择排序,交换排序,归并排序
1.因为插入排序需要有已经被排好的数据,所以我们可以认为第一个数据已经有序,从它的后一个开始插入。2.[0,end]是有序序列,将[end+1]处的元素tmp插入,从后往前依次比较3.如果tmp
2024-04-14 12:43:23
953
3
原创 101. 对称二叉树
思路:我们可以将这棵树看成把根节点删除的左右两棵树,题目保证了一定会有一个节点,所以我们就直接从它的左右孩子下手直接将他的孩子传给我们的接口函数,然后开始递归调用,此处需要注意的是因为我们是用相等二叉树的思路,但此处是对称二叉树,所以在递归调用的时候当往下一层递归时左边的树传左孩子时右边的树应该传右孩子,传右孩子时右边的树应该传左孩子,因为我们要的是满足对称。递归的返回条件有三个:1.当子节点为空时,有两种情况,一是只有一个根节点时此树仍是对称返回true,
2024-04-06 16:49:17
672
1
原创 237. 删除链表中的节点
步骤:先用Next记录node的后一个节点,然后将Next的值赋给node,最后free(Next)大致思路:将被删除节点的后一个节点的val和next赋值给被删除节点。一开始看到这题可能会毫无思路,但是仔细想想发现也是不难的。
2024-03-30 19:20:23
153
原创 题解 | #链表的回文结构#
步骤:求节点个数以及尾节点(最后比较用)->用节点个数的数学关系求翻转处的位置->将cur置于翻转处,prev记录cur前一个节点,next记录cur下一个结点->用三个指针将中间之后的节点进行翻转->最后从前后往中间遍历比较val。大致思路:将中间结点之后的节点翻转,然后用一个头指针head和一个尾指针tail分别从前面和后面往中间遍历并进行值的比较。
2024-03-30 17:12:51
320
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人