
C++
文章平均质量分 89
本栏目的创立,希望小白可以入门C++语言。这份教程只面向小白学习,如果您希望学习更多C++高级内容,则完全无需阅读此教程。在入门之后,您可以看一些其它教程,理解更高级的语法。笔者希望用一些简单的语言来解释C++,让您对C++有一定了解,因此您无需任何编程基础。不过如果您掌握一些其它编程语言基础,会对
sdzdwa
目前会持续更新C++内容,喜欢的小伙伴们记得点点关注,如果有什么不懂的问题欢迎来深入交流,同时博主也学过一点C语言,欢迎来交流!!!
展开
-
【C++---unordered_set/map底层封装】个不拘一格的集合。它不似有序集合那般循规蹈矩,而是以一种洒脱不羁的方式,将元素们随意地散落其中。每一个元素都是独一无二的。
【代码】【C++---unordered_set/map底层封装】个不拘一格的集合。它不似有序集合那般循规蹈矩,而是以一种洒脱不羁的方式,将元素们随意地散落其中。每一个元素都是独一无二的。原创 2025-01-26 11:47:01 · 1368 阅读 · 63 评论 -
【C++---哈希表】哈希表的魅力,不仅在于其高效与便捷,更在于其背后所蕴含的深刻哲理。它告诉我们,即使面对再复杂、再混乱的世界,只要我们用心去寻找、去创造,总能找到一种方法,将其变得有序而美好。
这里的unordered_set其实与set相似,只不过底层实现是不一样,还有其他特殊的不同.不过他们大部分功能是相同的。unordered_set的声明如下,Key就是unordered_set底层关键字的类型•unordered_set默认要求Key⽀持转换为整形,如果不⽀持或者想按⾃⼰的需求⾛可以⾃⾏实现⽀持将Key转成整形的仿函数传给第⼆个模板参数•unordered_set默认要求Key⽀持⽐较相等,如果不⽀持或者想按⾃⼰的需求⾛可以⾃⾏实现⽀持将Key⽐较相等的仿函数传给第三个模板参数•。原创 2025-01-25 11:57:58 · 1722 阅读 · 54 评论 -
【C++----红黑树封装set / map底层大致封装】在C++的世界里,每一次编译都是对智慧的考验,每一次调试都是对耐心的磨砺。开发者们在这里不断学习、成长,用代码编织出一个个精彩纷呈的故事。
•如果当前结点是⽗亲的右,根据中序左⼦树->根结点->右⼦树,当前当前结点所在的⼦树访问完了,当前结点所在⽗亲的⼦树也访问完了,那么下⼀个访问的需要继续往根的祖先中去找,直到找到孩⼦是⽗亲左的那个祖先就是中序要问题的下⼀个结点。end()如何表⽰呢?如下图:当it指向50时,++it时,50是40的右,40是30的右,30是18的右,18到根没有⽗亲,没有找到孩⼦是⽗亲左的那个祖先,这是⽗亲为空了,那我们就把it中的结点指针置为nullptr,我们⽤nullptr去充当end。原创 2025-01-18 17:31:05 · 1504 阅读 · 58 评论 -
【C++---红黑树】在编程的浩瀚星空中,C++犹如一颗璀璨的星辰,以其独有的韵律和节奏,吟唱着智慧与创造的赞歌。它不仅仅是代码的堆砌,更是思维与艺术的交融,引领着无数追梦者,在数字的世界里翩翩起舞。
1.1红黑树的规则1.2路径问题1.3 红⿊树如何确保最⻓路径不超过最短路径的2倍的?1.4 红⿊树的效率对于时间复杂度的计算:假设N是红⿊树树中结点数量,h最短路径的⻓度,那么 2h-1原创 2025-01-16 20:53:42 · 1351 阅读 · 44 评论 -
详解 【AVL树】
那么a就只有4处可以插入值导致5的平衡因子为2,而b或c是以上x,y,z三种情况都可以。这里a的结构只能是x,因为为y或z时那么旋转的结点就不是5了,而是y或z结点*那么搭配就有3**3*4=36种搭配结果。原创 2024-11-22 23:40:19 · 1640 阅读 · 57 评论 -
c++--------《set 和 map》
• set的声明如下,T就是set底层关键字的类型• set默认要求T⽀持⼩于⽐较,如果不⽀持或者想按⾃⼰的需求⾛可以⾃⾏实现仿函数传给第⼆个模版参数• set底层存储数据的内存是从空间配置器申请的,如果需要可以⾃⼰实现内存池,传给第三个参数。• ⼀般情况下,我们都不需要传后两个模版参数。• set底层是⽤红⿊树实现,增删查效率是 ,迭代器遍历是⾛的搜索树的中序,所以是有序的。O(logN)原创 2024-11-17 18:03:29 · 1906 阅读 · 85 评论 -
《⼆叉搜索树》
4• ⼆叉搜索树中可以⽀持插⼊相等的值,也可以不⽀持插⼊相等的值,具体看使⽤场景定义,后续我们学习map/set/multimap/multiset系列容器底层就是⼆叉搜索树,其中map/set不⽀持插⼊相等值,multimap/multiset⽀持插⼊相等值。那么这样的效率显然是⽆法满⾜我们需求的,⼆叉搜索树的变形,平衡⼆叉搜索树AVL树和红⿊树,才能适⽤于我们在内存中存储和搜索数据。找到key对应的value。key的搜索场景实现的⼆叉树搜索树⽀持增删查,但是不⽀持修改,修改key破坏搜索树结。原创 2024-11-10 15:32:20 · 1572 阅读 · 119 评论 -
C++《类和对象》(上)
class Datepublic:int Getdaymonth(int year,int month)//日期获取 默认成《内联函数》在calss中return 29;else//d1+=/+//d1-= 和 -//d++,++d//d--和--d//d1-d2(俩日期相减)private:int _year;int _month;int _days;// C++升级struct升级成了类// 1、类⾥⾯可以定义函数。原创 2024-07-23 19:35:12 · 1059 阅读 · 21 评论 -
C++《类和对象》(中)
默认成员函数就是⽤⼾没有显式实现,编译器会⾃动⽣成的成员函数称为默认成员函数。那么我们主要学习的是1:编译器自动生成的成员函数是否满足我们的需求。2:当编译器自动生成的函数不满足我们需求时,我们应该如何自己实现?C++把类型分成内置类型(基本类型)和⾃定义类型。内置类型就是语⾔提供的原⽣数据类型,如:int/char/double/指针等,//栈public:perror("malloc申请空间失败");return;_top = 0;原创 2024-07-24 19:58:36 · 1570 阅读 · 56 评论 -
C++ 《类与对象》(中下)
运算符重载是具有特名字的函数,他的名字是由operator和后⾯要定义的运算符共同构成。和其他函数⼀样,它也具有其返回类型和参数列表以及函数体。//声明int operator+(int x,int y)//定义return x+y;但是关于运算符重载函数的声明与定义一定的要求:// 重载为全局的⾯临对象访问私有成员变量的问题// 有⼏种⽅法可以解决:// 1、成员放公有// 2、Date提供getxxx函数// 3、友元函数// 4、重载为成员函数1.成员公有。原创 2024-07-25 18:56:29 · 1140 阅读 · 38 评论 -
C++《日期》实现
在该文件中是为了声明函数和定义类成员。原创 2024-07-13 18:14:38 · 531 阅读 · 36 评论 -
堆《数据结构》
量非常大,排序就不太可取了(可能数据都不能一下子全部加载到内存中)。2:建堆和堆删除中都用到了向下调整,因此掌握了向下调整,就可以完成堆排序。比如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。如:a[child] < a[parent] 建。a[child] > a[parent]建。向下调堆:从最后一个根节点开始调整。1.用数据集合中前K个元素来建堆。对于Top-K问题,能想到的。第三层: 向上调整2次。第二层:向上调整 1次。第n层:向上调整n次。第n层:2^n-1个。原创 2024-08-24 18:41:17 · 1821 阅读 · 117 评论 -
排序《数据结构》
2、稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成个组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后,取,重复上述分组和排序的工作。1、排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。原创 2024-09-08 20:08:57 · 2158 阅读 · 118 评论 -
C++之————string类
运用到getline来代替cin输入字符串,因为cin>>与scanf类似遇到字符空格(‘ ’)就会结束,而getline则不会最后再用 总数-1-pos=最后一个单词长度int main()return 0;原创 2024-08-06 17:48:50 · 1282 阅读 · 48 评论 -
c++----------继承
下⾯我们看到Person是基类,也称作⽗类。Student是派⽣类,也称作⼦类。(因为翻译的原因,所以既叫基类/派⽣类,也叫⽗类/⼦类)原创 2024-11-06 17:32:32 · 831 阅读 · 101 评论 -
数据结构《栈》
分开成。原创 2024-08-10 17:36:53 · 492 阅读 · 19 评论 -
数据结构-------队列
FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头。队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出。首先实现一个队列,然后在构建俩个队列,俩个队列互相导数据。与栈类似,可以把声明与定义分开。组头上出数据,效率会比较低。实现文件.c(接口实现)原创 2024-08-10 18:17:04 · 896 阅读 · 37 评论 -
初阶C++(三)
inline实际上是对代码效率的提高起着重要作用,其特点:⽤inline修饰的函数叫做内联函数,编译时C++编译器会在调⽤的地⽅展开内联函数,这样调⽤内联函数就需要建⽴栈帧了,就可以提⾼效率**原创 2024-07-10 16:46:44 · 1144 阅读 · 10 评论 -
二叉树《数据结构》
又因为一个度为2的结点会有2个子结点,一个度为1的结点会有1个子结点,除根结点外其他结点都有父结点,n0+n1-1,由于完全二叉树中度为1的结点数只有两种可能0或1,由此得到n0=n/2 或 n0=(n+1)/2。1.某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( )双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点;如上图:A是B的父结点。的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对。原创 2024-08-19 19:16:00 · 2068 阅读 · 84 评论 -
c++-----------------多态
多态是⼀个继承关系的下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为。⽐如Student继承了Person。Person对象买票全价,Student对象优惠买票。原创 2024-11-08 11:54:32 · 2214 阅读 · 68 评论 -
《初级C++》(一)
在C/C++中,变量、函数和后⾯要学到的类都是⼤量存在的,这些变量、函数和类的名称将都存在于全局作⽤域中,可能会导致很多冲突。使⽤命名空间的⽬的是对标识符的名称进⾏本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。• 定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。• namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下⾯的rand不在冲突了。原创 2024-07-08 17:19:46 · 876 阅读 · 12 评论 -
vector
vector的介绍文档使用STL的三个境界:能用,明理,能扩展 ,那么下面学习vector,我们也是按照这个方法去学习)构造函数声明接口说明vector()(重点)无参构造构造并初始化 n val(重点)拷贝构造使用迭代器进行初始化构造vector的构造代码演示。原创 2024-09-29 17:42:54 · 1186 阅读 · 98 评论 -
类和对象(下)
所以静态成员函数没有this指针,静态成员函数中可以访问其他的静态成员,但是不能访问⾮静态的,因为没有this指针。引⽤成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进⾏初始。尽量使⽤初始化列表初始化,因为那些你不在初始化列表初始化的成员也会⾛初始化列表,如果这。如果你没有给缺省值,对于没。显⽰在初始化列表初始化的⾃定义类型成员会调⽤这个成员类型的默认构造函数,如果没有默认构。3、⽤static修饰的成员函数,称之为静态成员函数,静态成员函数没有this指针。原创 2024-08-01 17:06:41 · 3230 阅读 · 52 评论 -
C++ ----------- 栈和队列
1. 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的2. 此类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)3. 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器,queue提供一组特定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。4.底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。原创 2024-11-02 16:57:00 · 1804 阅读 · 91 评论 -
初识模版!!
泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。1.隐式实例化:让编译器来根据实参来推导参数模版实际类型。2.显示实例化:在函数名字后的中填写类型。相似的结构太多,这样看起来就会很挫。原创 2024-09-21 17:19:14 · 788 阅读 · 91 评论 -
初阶C++(二)
引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,编译器不会为引⽤变量开辟内存空间,它和它引⽤的变量共⽤同⼀块内存空间。如:周树人被称作为“”鲁迅“、孙悟空被称作为“斗战神佛”…C++中为了避免引⼊太多的运算符,会复⽤C语⾔的⼀些符号,⽐如前⾯的>,这⾥引⽤也和取地址使⽤了同⼀个符号&,⼤家注意使⽤⽅法⻆度区分就可以接下来就是对引用的定义-------int main()//用b、c、d来引用aint a = 0;int& b = a;int& c = a;原创 2024-07-09 16:51:07 · 1042 阅读 · 13 评论