自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 C++智能指针

智能指针可用于管理new出来的资源,利用其生命周期结束后调用的析构函数,自动delete资源。

2025-04-04 13:00:13 184

原创 C++11之右值引用

移动构造函数是⼀种构造函数,类似拷⻉构造函数,移动构造函数要求第⼀个参数是该类类型的引⽤,但是不同的是要求这个参数是右值引⽤,如果还有其他参数,额外的参数必须有缺省值。通过模板或typedef中的类型操作可以构成引⽤的引⽤时,这时C++11给出了⼀个引⽤折叠的规则:右值引⽤的右值引⽤折叠成右值引⽤,所有其他组合均折叠成左值引⽤。移动赋值是⼀个赋值运算符的重载,他跟拷⻉赋值构成函数重载,类似拷⻉赋值函数,移动赋值函数要求第⼀个参数是该类类型的引⽤,但是不同的是要求这个参数是右值引⽤。

2025-03-01 16:49:31 426

原创 C++STL之map和set

基于红黑树,C++提供了map和set两个容器,map容器内元素以键(key)值(val)对的形式存储,而set内则仅以键(key)的形式存储,与vectory,list这样的顺序容器不同,map和set是逻辑结构⾮线性结构的关联式容器。

2025-02-16 11:09:50 283

原创 C++数据结构之红黑树

红黑树是对于二叉搜索树除了AVL数外的另一种改进,对节点引入额外的颜色变量,通过对颜色规则的控制,保证树的最长路径不超过最短路径的二倍。

2025-01-26 04:13:36 618

原创 C++数据结构之二叉搜索树和AVL树

数据结构中我们最开所学的查找是顺序查找,时间复杂度为o(n),然后是二分查找,时间复杂度为o(logn),虽然降低了顺序查找的时间复杂度,但其本身也存在一定的不足,先不说其对原始数据要先排序的时间损耗,更重要的是,其依赖的顺序表结构本身对频繁的插入删除都不怎么友好下面让我们来认识两个新的查找方法。

2025-01-10 20:35:30 572

原创 C++多态

多态是⼀个继承关系的下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为。注意:必须是引用或指针去调用虚函数才能实现多态,那么什么是虚函数呢?类成员函数前⾯加virtual修饰,那么这个成员函数被称为虚函数。注意⾮成员函数不能加virtual修饰。子类要想实现多态需对父类的虚函数进行重写,派⽣类中有⼀个跟基类完全相同的虚函数(即派⽣类虚函数与基类虚函数的返回值类型、函数名字、参数列表完全相同),称派⽣类的虚函数重写了基类的虚函数。

2024-10-06 13:46:34 670

原创 C++继承

继承(inheritance)机制是⾯向对象程序设计使代码可以复⽤的最重要的⼿段,它允许我们在保持原有类特性的基础上进⾏扩展,增加⽅法(成员函数)和属性(成员变量),这样产⽣新的类,称⼦类。按照我的理解,就是子类对父类成员的复用。

2024-09-15 18:48:47 1098

原创 C++STL之stack和queue

在我们使用C语言来实现stack---栈和queue---队列时,其底层使用了数组和链表来存放数据,而在C++的stack和queue类中,通过模版实现了容器适配器,在创建时,我们可以用尖括号中第二个类型决定stack和queue的底层容器,如果不写,默认为deque。与vector和list相比,deque在头插和尾插上面的效率要更优,下标随机访问也不错,但相比vector略逊一筹,中间插入效率很低,要挪动数据,是O(n)

2024-08-20 10:03:51 210

原创 C++STL之vector和list

vector迭代器使用的是随机迭代器,允许进行++, -- , + , - , += , -= ,= 操作,且因为是随机迭代器,vector对象本身支持[]下标访问,而list使用的是单向迭代器,仅允许++,-- ,=操作,list对象本身不支持[]下标访问。迭代器失效有两种原因,第一种是迭代器所指向的原有空间所含内容被删除或转移,形成了野指针,我们所举的例子就属于这种,最开始初始化时我们为其分配了3个元素的空间,但后面又追加了一个元素,原有空间不够,数组扩容,原有内容被转移,it迭代器自然也就失效了。

2024-08-08 18:34:08 775

原创 C++STL之string

使用reverse重新设定字符串容量,如果设定的容量小于现有字符串长度,则保持原有容量不做修改,如果大于现有字符串长度而小于现有容量,则是否缩容由编译器决定,如果大于现有容量则进行扩容操作,直到达到或超过目标容量,使用capacity来查看对象当前容量。auto为自动类型,编译器会为a变量匹配合适的类型,换成char也可以,通过范围for,将s3中的每个元素赋值给a并进行遍历,当然,如果想对s3中的元素进行改变,使用auto&或char&即可。向string尾部添加字符或字符串,最简单方式就是使用+=

2024-07-26 19:06:39 656

原创 C++内存管理与模版

与malloc/free不同的是,malloc申请内存失败时返回的是null,需要判空,而new则不需要,但它要捕获异常,malloc无法完成对自定义类型对象的初始化,而new可以,注意:在使用时,一定不要乱搭配,比如new要和delete搭配,new[]要和delete[]搭配,不然就会出现一堆莫名其妙的bug!malloc/free在创建和销毁对象时,不会调用构造和析构函数,而new/delete可以。,可以认为,new/delete是为了适应类和对象的需要,对malloc/free进行的升级。

2024-07-21 09:13:58 310

原创 C++类和对象(3)

实现构造函数时,除了在函数体内赋值之外,还有一种初始化的方法,即初始化列表,以一个冒号开始,逗号分隔,中间为“成员变量(初始值)”,初始化列表是每个成员变量初始化的地方,每个成员都要走初始化列表,每个成员变量在初始化列表中只能出现一次,引用成员变量,const成员变量,无默认构造的类类型变量。,为所有对象共享,不存在于对象中,仅存放于静态区,由static修饰的成员函数,称为静态成员函数,,仅受外部类类域和访问修饰符影响,在外部类的对象中是不存在这个类的,的关系,即a是b的友元,但b不一定是a的友元。

2024-07-17 19:05:07 312

原创 C++类和对象(2)

C++规定,函数传值传参会调用类的拷贝构造,如果拷贝构造函数是直接传的自身类类型,那么它就又会去调用自身的拷贝构造,就这样形成了无限递归问题,但如果我们传的是引用的话,就不会调用拷贝构造,问题就迎刃而解了。,且任何额外的参数都有默认值,则此构造函数被叫做拷贝构造函数,用于将一个对象拷贝初始化给另一个要创建的对象,如果不直接定义拷贝构造函数的话,编译器也会生成一个默认的拷贝构造,对内置成员变量完成。那么,为什么拷贝构造传入的是对自身类型的引用而不是自身类型呢?的直接拷贝符值,而拷贝构造是将。

2024-07-16 18:33:23 311

原创 C++类和对象(1)

C++中的数据和函数都放到了类里面,通过访问修饰符进行了限制,这是C++封装的一种体现,是一种更严格的规范管理,C++中类的定义和C语言中结构体的定义类似,在类中定义的变量未加访问修饰符默认为私有,在结构体中则为共有,在类中,由pubulic修饰的变量或函数可以被外界访问修改,而由private和protected修饰的只能在对象内部访问修改,定义的示例如下:int _year;int _month;int _day;_day = day;

2024-07-12 16:42:33 373

原创 C++命名空间,缺省函数与函数重载

【代码】C++命名空间,缺省函数与函数重载。

2024-07-08 18:11:45 222

原创 二叉树的遍历

这, 是一棵二叉树,你想访问它的节点,就要用到二叉树的遍历。

2024-07-06 09:17:37 229

原创 C语言数据结构--队列的实现和循环队列问题

开始时end=-1,head=0,size=0,当有数据插入时,end前移加1,size+1,当有数据弹出时,head前移加1,size-1,同时如果size等于capacity时,不可再加元素,size等于0时,不可再弹出元素,在满足size条件的情况下,如果head或end将要加一时若加一后等于capacity,为防止越界,将其设为0。循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。在了解了队列的结构后,我们来解决循环列表问题。

2024-05-17 16:52:28 370 3

原创 C语言数据结构--堆的实现和堆排序

为了删除堆顶数据,我们先将堆顶元素和堆尾元素交换位置,然后堆的size,也就是堆的元素个数减一,忽略原堆顶元素,就相当于删了它,现在要用向下调整算法把原堆尾元素拉下来。然后让它与父节点5比较,如果它比父节点小,就和父节点交换位置,继续向上比较,直到父节点比它小或到堆顶为止。抽象的是,堆的实现靠的是顺序表(也难怪可以用它来排序啦),也就是数组,那么,堆是如何通过数组实现的呢?然后就是在堆中删除数据,删除数据用的是向下调整算法,是向上调整算法的逆过程,现在,堆的结构已经实现,下面就来研究堆排序吧!

2024-05-16 18:50:33 486 9

原创 C语言数据结构--栈的实现与括号匹配问题

解题思路:设立一个栈,从头开始录入括号,括号为右括号时入栈,若遇到左括号时取栈顶元素比较,如果不是相应的右括号就直接判false(注:可能遇到栈空了遇到左括号的情况,需提前判定栈是否为空,如果在空的情况下遇到,直接判false),若是则继续,直到字符串走完。当字符串走完时,如果栈内已空,就可以放心返回true了,如果不为空,则是“[[{()}]”这种情况,直接返回false。括号匹配问题:判定给定字符串(只含“{}”,“[]”,"()"3种括号)中的括号是否匹配,若匹配返回true,不匹配返回false。

2024-05-10 12:42:46 259 6

原创 C语言数据结构---链表的带环问题

题目:已知存在一条链表,请通过代码判断其是否带环,若带环,请返回链表开始入环的第一个节点,若不带,返回NULL. 题目力扣连接: 题一:. - 力扣(LeetCode) 题二: . - 力扣(LeetCode) 使用快慢指针法,从头结点开始,快指针走两步,慢指针走一步,如果最后两指针相遇,则存在环 题一相关代码如下: 代码很简单,但是为什么呢? 如上图所示,此为一个带环链表,快慢指针开始均指向头结点,按刚

2024-05-04 00:21:42 832 6

原创 唐老师的C#教程练习---Stack(将数字转为二进制)

【代码】唐老师的C#教程练习---Stack(将数字转为二进制)

2024-02-29 14:06:55 408 1

原创 唐老师的C#教程练习----索引器

【代码】唐老师的C#教程练习----索引器。

2024-02-17 09:08:12 422 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除