c++学习
文章平均质量分 66
从基础开始逐渐学习认识c++
幻荼
这个作者很懒,什么都没留下…
展开
-
c++:AVL树简析
向树中插入新结点后,要能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整, 即可降低树的高度,从而减少平均搜索长度)一旦平衡因子达到了2或者-2,那么我们就需要进行旋转,来使结点所有平衡因子在-1到1的合理区间内。AVL其实是搜索二叉树的一种特殊模式。...原创 2022-08-12 20:16:52 · 390 阅读 · 0 评论 -
C++:map与set简析
举例:我插入1-5,7,9.然后用lower_bound找3和6,3可以直接找到,但是6没有,所以返回>=6最近的元素7.set 翻译为集合,是一个内部自动有序且不含重复元素的容器,加入 set 之后可以实现自动排序。如果我们判断了,没有这个数再进行删除,那么就不会报错了,所以说判断是很重要的不能省略。此时虽然队列中有3,但是upper是返回比3更大值的最近的一个,所以返回了4。算法中的find是暴力查找,是遍历整个区间,所以时间复杂度是O(N);map是STL的一个关联容器,它提供一对一的hash。...原创 2022-08-05 19:46:30 · 1637 阅读 · 0 评论 -
c++:二叉搜索树的简析与详细实现(万字)
该树的任意一个子树都要满足左子树的值原创 2022-07-27 18:16:56 · 464 阅读 · 0 评论 -
树的孩子兄弟表示法
代码】树的孩子兄弟表示法。原创 2022-07-27 10:06:41 · 188 阅读 · 0 评论 -
c++类和对象
目录认识类和对象:访问限定符:this指针:认识类和对象:C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成举一个例子,如果我们要设计一个点餐平台,依照生活中的例子那么C:商家上架商品,客户点餐,通知商家制作外卖,通知骑手配送,客户吃完点评.....(过程)而C++:商家、客户、骑手(对象)从这个地方就衍生出了”类”这个概念。我们在学习C语言的时原创 2022-05-20 00:16:31 · 107 阅读 · 0 评论 -
C++:运算符重载简介
一:定义运算符重载,就是对已有的运算符(C++中预定义的运算符)赋予多重的含义二:格式三:例子这里我们是重新定义了’+’这个运算符,让他能够完成坐标的相加这就让’+’这个运算符被重载后,其原有的功能依然保留,没有丧失,又能完成特定情况下的任务。四:规则1.c++不允许用户自己定义新的运算符,只能对已经有的运算符进行重载。2.c++允许重载的运算符 双目关系运算符:+,-,,/,%关系运算符:==,!=,,=,逻辑运算符:||,&&,!单目运算符:+,-,指针,&自增自减运......原创 2022-07-05 22:07:49 · 239 阅读 · 0 评论 -
C++:浅拷贝和深拷贝简析
目录浅拷贝: 深拷贝:总代码:我们先来看一段代码在这里我定义了两个 p1和p2,然后将p1通过浅拷贝复制给了p2 然后得到如下结果 我们可以看到虽然已经成功赋值,但是编译器报错,这就和浅拷贝有关以上面为例 简单来说p2通过浅拷贝,和p1指向了同一个空间由于栈区的规则是先进后出,当执行完拷贝构造函数的时候,我们程序就会先执行p2的析构函数,导致释放堆区开辟的数据,然后这个已经释放的内存又要再被p1释放,这样就会报错就是说同一块内存数据被释放了两次,这是编译器所不允许的 同时,因为是指向原创 2022-07-06 10:20:03 · 191 阅读 · 0 评论 -
c++:多态,看这一篇就足够了
多态的概念通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。举个例子买票普通人全价,学生半价,军人全价但优先购票....这就是对买票这一个具体行为,不同人去完成时产生的不同结果。虚函数即被virtual修饰的类成员函数称为虚函数。我们先来看一个经典例题//求B,也就是sizeof(A)的大小classA{public{}privateintage;};intmain(){Aa;return0;}我们看调试代码。.....................原创 2022-07-23 11:49:51 · 434 阅读 · 1 评论 -
c++:list简介和常见用法总结
1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2.list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3.list与forward_list非常相似主要的不同在于forword_list是单链表,只能朝前迭代。与其他的序列是容器相比(array,vector,deque)list通常在任意位置进行插入、移除元素的效率更高。函数说明list()构造空的list。...原创 2022-07-18 11:23:05 · 2628 阅读 · 0 评论 -
c++:new的简析
一:定义new其实就是开辟一段新的空间,但是和一般的声明不同的是,new开辟的空间在堆上,而一般声明的变量存放在栈上。通常来说,当在局部函数中new出一段新的空间,该段空间在局部函数调用结束后仍然能够使用,可以用来向主函数传递参数。另外需要注意的是,new的使用格式,new出来的是一段空间的首地址。所以一般需要用指针来存放这段地址。二:用法(三种)格式1:指针变量名=new 类型标识符;格式2:指针变量名=new 类型标识符(初始值);格式3:指针变量名=new 类型标识符 [内存单元个数];格式1和格式2原创 2022-07-13 13:32:01 · 1838 阅读 · 0 评论 -
c++:reserve和resize简介和区别
目录reserve: resize:总结:首先我们需要认清楚两个概念capacity和size.举一个例子,这里有半瓶1L的矿泉水。那么1L就是我们说的容量,也就是capacity,表示指容器在内存中开辟的存储空间的总大小。半瓶,也就是500ML,也就是size,表示已经使用的空间大小。理解了这个之后我们下面对两个函数分别进行介绍一:函数原型1.如果n>capacity,那么就在内存空间重新分配一块更大的连续空间,然后将容器内所有的有效元素从旧空间的位置全部复制到新空间相应的位置,然后释放旧空间,指向原创 2022-07-06 13:47:02 · 2595 阅读 · 0 评论 -
c++:vectro模拟实现(详细)
我们模拟实现vector不是为了造更好的轮子,而是通过模拟更加理解vector这个函数我们模拟实现vector不是为了造更好的轮子,而是通过模拟更加理解vector这个函数我们模拟实现vector不是为了造更好的轮子,而是通过模拟更加理解vector这个函数、目录 第一步:创建两个头文件第二步:设定各种初始函数 第三步:实现尾插(push_back)第四步:打印数据 第五步:尾删(pop_back)第六部:resize的实现第七步:insert的模拟实现(迭代器失效) 第八步:erase的模拟实现第九步:s原创 2022-07-14 10:31:38 · 271 阅读 · 0 评论 -
日期类c++
目录头文件:详细步骤:第一步:计算闰年和判断日期是否合法第二步:各类运算符重载总代码:我们今天实现一个简单的计算日期 我们这里先给出头文件,后面一个一个解释详细步骤:第一步:计算闰年和判断日期是否合法 我们将year,month,day赋值之后,首先进行判断,如果出现异常天数直接终结程序(如2022,1,32,这种不存在的日期)随后一个问题就出来了,因为闰年和非闰年的2月不同,所以我们又使用一个函数getmonthday,来判断闰年的同时获取当月天数;有些同学可能直接是【0,31,59(原创 2022-06-01 18:04:06 · 239 阅读 · 0 评论 -
c++:insert函数和erase函数的简介
原型:好吧,是不是看不明白,我们举例说明,一般insert有如下三个使用情况在指定位置it前“插入”值为val的元素,返回指向这个元素的迭代器,结果如下: 在指定位置it前“插入”num个值为val的元素 结果如下 在指定位置it前“插入”区间[first, last)的所有元素.first,last,it都是迭代器 结果如下 也是三种用法删除从下标pos开始的n个字符结果如下删除postion处的一个字符,postion是迭代器结果如下:删除从first到last原创 2022-07-07 10:55:07 · 3294 阅读 · 0 评论 -
C++引用
解释引用首先我们先来看一个引用的例子int main(){ int a = 10; int& Bin = a; cout << a << endl; cout << Bin << endl; cout << &a << endl; cout << &Bin << endl;}对于一个int型函数a,我们对a进行了引用,引用的新int函数叫Bin。由他们原创 2022-05-18 09:56:28 · 281 阅读 · 2 评论 -
c++:继承(超详解)
目录一:什么是继承二:继承的格式继承的总结:二:子类和父类(基类和派生类)1.子类和父类的相互赋值:2.同名的成员变量3.同名成员函数三:子类中默认的成员函数1.构造函数2.析构函数3.拷贝构造4.赋值运算符重载 四:单继承和多继承单继承: 多继承:菱形继承解决方法一:解决方法二:单继承和多继承的总结:定义:继承(inheritance)机制是面向对象程序设计中使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生的新类,称派生类(或子类),被继承的类称基类(或父类)原创 2022-07-22 12:19:36 · 66898 阅读 · 20 评论 -
c++:中缀表达式和后缀表达式,中缀转后缀(简析)
从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于找顶符号(乘除优先加减)则栈顶元素依次出找并输出,并将当前符号进栈,一直到最终输出后缀表达式为止。又称逆波兰表达式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行。中缀表达式是一个通用的算术或逻辑公式表示方法,操作符是以中缀形式处于操作数的中间。其实就是我们平时的运算。二什么是后缀表达式。...原创 2022-07-19 16:43:15 · 1421 阅读 · 0 评论 -
C++:什么是c_str
功能:c_str() 函数可以将 const string* 类型 转化为 cons char* 类型,然后将C++的string转化为C的字符串数组,c_str()生成一个const char *指针,指向字符串的首地址简单举个例子 那么既然是指向字符串首地址,那么字符串改变,这个c_str传过去会不会改变呢?结果是会改变。下面举例: 所以说为了防止这种情况,我们一般采用一些方法将这个数据保存下来,比如strcpy.这样无论字符串怎么变动,我们的P都不会改变了。总结:c_str就是生成原创 2022-07-06 08:32:43 · 612 阅读 · 0 评论 -
C++:从零开始,万字模拟实现string(超详细)
前言:因为模拟实现string中途修修改改了很多代码,所以建议大家先复制总代码在自己的vs下,然后再来一步一步看------------------------开始------------------------为了模拟string,我们需要自己命名一个新的空间,我这里是’bit’,以方便和库中的string作区分然后创建两个,一个是头文件’string.h’,另一个是.cpp文件"test.cpp"我这里自己定义了一个空间名字为”bit”,然后定义了一个String类。对于我们定义的新字符串_str,我们原创 2022-07-07 13:32:44 · 515 阅读 · 1 评论 -
c++模板简介
一:定义函数模板不是一个实在的函数,编译器不能为其生成可执行代码。定义函数模板后只是一个对函数功能框架的描述,当它具体执行时,将根据传递的实际参数决定其功能。一个程序一般是经过预处理——>编译——>汇编——>链接。但是因为程序无法知道模板的具体类型(int,double),所以无法进行预处理,也就不能生成可执行代码。二:例子下面我们来看一个例子我们在学习c语言的时候,当我们需要交换两个数,我们是这样做的交换整数交换小数 我们可以看出,只要类型做了变化,我们就需要重新写一个几乎不变的代码,这是非常原创 2022-07-03 16:52:50 · 350 阅读 · 0 评论