自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 优选算法----双指针

涉及到的题目有:移动零,复写零,快乐数,盛水最多的容器,有效三角形个数,两数之和,三数之和,四数之和

2025-04-16 17:51:57 725

原创 详解STL----list

5. 与其他序列式容器相比,list和forward_list最大的缺陷是不支持任意位置的随机访问,比如:要访问list的第6个元素,必须从已知的位置(比如头部或者尾部)迭代到该位置,在这段位置上迭代需要线性的时间开销;通过前面例子知道,反向迭代器的++就是正向迭代器的--,反向迭代器的--就是正向迭代器的++,因此反向迭代器的实现可以借助正向迭代器,即:反向迭代器内部可以包含一个正向迭代器,对正向迭代器的接口进行包装即可。2.2 list的反向迭代器。2. list的模拟实现。1.1 list的介绍。

2025-04-16 17:51:27 926

原创 详解STL----vector

erase删除pos位置元素后,pos位置之后的元素会往前搬移,没有导致底层空间的改变,理论上讲迭代器不应该会失效,但是:如果pos刚好是最后一个元素,删完之后pos刚好是end的位置,而end位置是没有元素的,那么pos就失效了。这个问题经常会考察,不要固化的认为,vector增容都是2倍,具体增长多少是根据具体的需求定义的。2. 如果拷贝的是内置类型的元素,memcpy既高效又不会出错,但如果拷贝的是自定义类型元素,并且自定义类型元素中涉及到资源管理时,就会出错,因为memcpy的拷贝实际是浅拷贝。

2025-04-10 23:30:00 995

原创 string类的模拟实现

在释放时同一块空间被释放多次而引起程序崩溃,这种拷贝方式,称为浅拷贝。2 .浅拷贝。

2025-03-20 20:50:31 263

原创 string练习题

1.仅仅反转字母1.仅仅反转字母我们使用 left 指针从左边开始扫描字符串 s,right 指针从右边开始扫描字符串 s。如果两个指针都扫描到字母,且 left<right,那么交换 s[left] 和 s[right],然后继续进行扫描;否则表明反转过程结束,返回处理后的字符串。2.字符串里面最后一个单词的长度。

2025-03-20 20:41:09 442

原创 STL--string的学习

1. 为什么学习string类?1. 为什么学习string类?1.1 C语言中的字符串C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。2. 标准库中的string类2.1 string类(了解)1. 字符串是表示字符序列的类。

2025-03-19 21:19:16 809

原创 模板初阶(初识模板)

函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。1. 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数。1. 一个非模板函数可以和一个同名的函数模板同时存在,而且该函数模板还可以被实例化为这个非模板函数。像发明出的活字印术一样,我们提前做好模板,到时候用提前刻好的字来组成文章。2. 代码的可维护性比较低,一个出错可能所有的重载均出错。,对于字符类型也是如此。2.4 函数模板的实例化。,对于模板函数的使用,

2025-03-19 20:13:57 942

原创 实现一个日期类(类和对象实践项目)

我们有了+=和-=来实现加就太容易了,可以直接套用+=,-=。我们要获得一个日期减后(加后)的一个新日期我们的返回值就不能再使用引用了的方式了,这样的话我们的新变量只是以前的一个别名,会改变以前的那个变量。我们需要对类里面的私有变量进行操作的时候我们需要流插入流提取的变量,但是放在类里面会将函数的this指针当作是第一个变量,我们把函数放在类外面的时候有访问不到私有变量。日期类里面的功能需要设计日期比较,日期推算,操作符+的重载,-的重载,++,--,流插入,流提取,=,-=,+=,>,<,<=,>=,!

2025-03-09 21:02:15 785

原创 C++的内存管理

如果申请的是内置类型的空间,new和malloc,delete和free基本类似,不同的地方是:new/delete申请和释放的是单个元素的空间,new[]和delete[]申请的是连续空间,而且new在申请空间失败时会抛异常, malloc会返回NULL。1. 调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对象空间的申请。1. 在释放的对象空间上执行N次析构函数,完成N个对象中资源的清理。____* pChar3在哪里?

2025-03-09 21:01:59 1447

原创 类和对象(下)

3. 经过2之后,在计算机中就有了一个洗衣机类,但是洗衣机类只是站在计算机的角度对洗衣机对象进行描述的,通过洗衣机类,可以实例化出一个个具体的洗衣机对象,此时计算机才能洗衣机是什么东西。比如上述Time类和Date类,在Time类中声明Date类为其友元类,那么可以在Date类中直接访问Time类的私有成员变量,但想在Time类中访问Date类中私有的成员变量则不行。用static修饰的成员函数,称之为静态成员函数。内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。

2025-03-07 19:30:00 995

原创 类和对象(上)

C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。比如:之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;现在以C++方式实现,会发现struct中也可以定义函数 上面结构体的定义,在C++中更喜欢用class来代替。class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数。类的两种定义方式:一般情况

2025-03-05 11:30:00 632

原创 类和对象(中)

内置类型就是语言提供的数据类型,如:int/char...,自定义类型就是我们使用class/struct/union等自己定义的类型,看看下面的程序,就会发现编译器生成默认的构造函数会对自定类型成员_t调用的它的默认成员函数。6. 关于编译器生成的默认成员函数,很多童鞋会有疑惑:不实现构造函数的情况下,编译器会生成默认的构造函数。原因:赋值运算符如果不显式实现,编译器会生成一个默认的。注意:在编译器生成的默认拷贝构造函数中,内置类型是按照字节方式直接拷贝的,而自定义类型是调用其拷贝构造函数完成拷贝的。

2025-03-05 11:30:00 1356

原创 初识C++(内联函数,auto关键字<C++11>,基于范围的for循环<C++>,指针空值nullptr<C++11>)

在C++98中,字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量,但是编译器默认情况下将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转(void *)0。inline是一种空间换时间的做法,它在编译阶段他会把函数体部分替换成函数调用,但是在遇到比较大的函数的时候,会使文件过大 ,减小了调用开销,提高程序运行效率。在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么?

2025-03-03 13:57:35 914

原创 操作符详解(内涵图解,例题)

上述的操作符,我们已经讲过算术操作符、赋值操作符、逻辑操作符、条件操作符和部分的单⽬操作符,今天继续介绍⼀部分,操作符中有⼀些操作符和⼆进制有关系,我们先铺垫⼀下⼆进制的和进制转换的知识。其实我们经常能听到2进制、8进制、10进制、16进制这样的讲法,那是什么意思呢?其实2进制、8进制、10进制、16进制是数值的不同表⽰形式⽽已。⽐如:数值15的各种进制的表⽰形式:我们重点介绍⼀下⼆进制: 其实10进制的123表⽰的值是⼀百⼆⼗三,为什么是这个值呢?其实10进制的每⼀位是权重的,10进制的数字从右向左是个

2025-03-03 13:57:12 986

原创 函数递归(斐波拉契数列)

1.递归是什么递归是学习C语言绕不开的话题,那什么是递归呢?递归其实是一种解决问题的方法,在C语言中,递归就是函数自己调用自己。上述就是一个简单的递归程序,只不过上面的递归只是为了演示递归的基本形式,不是解决问题,代码也会陷入死循环,导致栈溢出(Stack overflow)。把一个大型的复杂问题层层转化为一个与原问题相似,但规模较小的子问题来求解;直到子问题不能再被拆分 ,递归就结束了。所以递归的思考方式就是把的过程。递归中的的意思,归就是回归的意思,接下来慢慢体会。2.递归的限制条件。

2024-06-01 06:00:00 1950

原创 完全二叉树的实现(堆的实现)<堆排序>

1.完全二叉树实现的基本原理1.完全二叉树实现的基本原理我们来实现完全二叉树我们用到的,我们使用2.理解和认识堆堆的本质实际上也是一个完全二叉树,我们在堆中又分为和2.1大堆大堆首先要满足堆的条件---总是一个完全二叉树,同时还需要满足图中画了两个结构一个是在内存中的存储结构,另一个是逻辑结构。2.2小堆小堆首先要满足堆的条件和大堆一样,总是一个完全二叉树,另外还需满足3.堆的实现。

2024-05-16 20:31:34 287

原创 初讲树,二叉数(搜索二叉树,实现的方法<链式,顺序>)

树是一种非线性的结构,它是由N个数据的层次结构的集合,把它叫做树就是因为它的逻辑结构就像是一颗倒过来的树,它的根向上,叶子向下。 注意:树形结构中子树之间不能有交集,否则就不是树形结构。 树的结构相比与线性结构就比较复杂了,要储存起来就比较麻烦了,既然保存值域,也要保存结点与结点之间的关系,实际树的很多种表示方式如:双亲表示法,孩子表示法,孩子双亲表示法以及孩子兄弟表示法,我们这里就了解最简单的孩子兄弟表示法。 一棵二叉树是节点的一个有限集合,该集合:1.或者为空2.由一个根结点加上两个别称为左子树

2024-05-16 13:10:47 745

原创 链表OJ题(移除链表元素,反转链表,分割链表,环形链表(是否成环问题),链表中间节点(快慢指针讲解),环形链表(找入环节点))“题目来源力扣附带题目链接”

链表学习必刷题

2024-05-12 15:18:40 1118 1

原创 数据结构——队列的实现(概念和意义,实现的基本函数)

1.队列的定义和意义前面我们学习了两种存储结构1.顺序表2.链表,下面要教的队列就是由这两种物理结构所定义的逻辑结构。1.队列的定义和意义相比对于大多数的00后来说小学的时候放学回家老师会让大家排好队然后让家长一一来认领,这样可以让每个家长都可以找到自己的孩子,也便于管理。队列就具有这样的效果:队列只允许数据在一头插入,在另一端删除的数据结构,队列具有先进后出的特性(FIFO--Fist In First Out)入队列:进行插入操作的一端叫做队尾,出数据的一端叫做队头。

2024-05-01 16:39:57 457

原创 栈Stack的实现(实现的简单函数,与思路)

结构和概念结构和概念栈是一种特殊的线性表,进行数据插入和的删除一段叫做栈顶,另一端成为栈底压栈:栈的插入叫做进栈/入栈/压栈,入数据在栈顶。出栈:栈的删除叫做出栈。出数据也在栈顶。栈的实现前面所说的栈是一种特殊的线性表所以我们可以使用前面的链表和顺序表线性结构来实现,在我们操作的时候因为我们需要找顶,顶的位置就是我们插入和删除的位置,为了减小成本我们用顺序表实现就足够了。结构的定义一般的栈是不能实现空间扩充的,但是我们为了提高实现难度我们选择灵活空间的顺序表。

2024-04-20 15:21:40 620

原创 初识C++(命名空间,C++输入输出,函数的参数缺省,函数重载)

1.命名空间C++其实是C语言的一个升级版本,它容纳进去了面向对象的编程,并增加了许多库。C++还补充了C语言的许多语法不足,还优化了许多C语言设计不合理的地方,我们会学到标题上所讲的这些内容,为后面的类和对象打下基础。1.命名空间C++为了在数据命名,定义时的命名名称发生冲突增加了一个新的语法结构——命名空间,相较与以前我们会有许多的函数与变量都定义在全局作用域中,可能发生冲突的概率比较大,但是有了命名空间这个东西我们就可以大大避免这种事情的发生。

2024-04-17 15:30:18 774

原创 链表(数据结构,基本函数实现)

一个节点我们就这样设计。我们这样做就可以让空间相连:注意最后一个节点指向的指针一定是空,这样才可以保证让链表正常结束不会指向错误的空间。经过上面所总结的内容我们可以得出链表的结构体。

2024-03-25 13:34:33 1212 1

原创 C进阶——顺序表(数据结构,基础函数实现)

2.顺序表的特点1.顺序表概念顺序表是由结构体定义的里面包含三个元素(空间大小,元素个数,数组首地址)。它的逻辑结构不一定成线性但是空间结构一定呈线性(每个元素的储存空间是紧密相连的)。2.顺序表的特点和往常的数组相比顺序表的空间是可以进行增加的,不会像定义数组一样空间开多了浪费,开少了不够用的情况,所以顺序表对空间的使用更合理不会造成太大的浪费。3.定义一个顺序表前面说了顺序表是一个所以结构体就有3个元素。我们把数组首地址定义为arr;

2024-03-22 18:09:29 910 1

原创 函数(函数概念+static+extern)

3.自定义函数了解了库函数,我们的关注度应该聚焦在自定义函数上,自定义函数其实更加重要,也能给程序员写代码创造更多的创造性。3.1函数的语法形式ret_type fun_name(形式参数)ret_type是函数返回类型fun_name是函数名括号中放的是形式参数{}括起来的是函数体我们可以把函数想象成一个加工厂,工厂得输入原材料,经过工厂加工才能生产出产品,那函数也是一样的,函数一般会输入一些值(可以是0个,也可以是多个),经过函数内的计算,得出的结果。

2023-12-20 10:32:08 1048 1

原创 数组(基本概念)

1.数组的概念1.数组的概念从这个概念中我们就可以发现两个有价值的信息:1. 数组存放的是一个或多个数据,但是数组元素个数不能为0。2. 数组存放多个数据类型是相同的。数组分为一维数组和多维数组,多维数组一般比较常见的是二维数组。2.一维数组的创建和初始化2.1数组创建存放在数组的值称为,数组在创建的时候可以指定和类型1. type指定的是数组中存放存放类型,可以是:char,int ,short,float 等,也可以自定义类型。

2023-12-08 17:01:45 1353

原创 分支与循环(下)

1.do-while循环1.do-while循环1.1语法形式while和for这两个循环都是先判断,条件满足就进入循环,执行循环语句,如果不满足就跳出循环;而do-while循环则是直接进入循环体,执行循环语句,然后再执行while后面的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。1.2 do-while执行流程。

2023-11-16 17:52:16 226 1

原创 3.分支和循环(上)

1C语言是结构结构化的程序语言设计,结构指:循环结构,选择结构,循环结构。用if,switch实现分支结构,使用for,while,do-while实现循环结构。1。

2023-10-22 03:39:53 199 2

原创 变量和操作符

C语言中把经常变化的称为不变的值称为。创建变量的语法形式是这样的;在变量创建的时候给定一个值叫。

2023-10-16 21:50:07 527 4

原创 C语⾔数据类型

C语言中有多种数据,整型,字符类型,浮点型(对应小数)。定义类型的理由在于为了让编译器知道数据类型才可以知道怎么操作数据。C语言的数据类型a.字符型b.整型c.浮点型d.布尔类型C语言原本没有设置布尔值为一个单独的类型,而是使用整数0表示假,非零表示真。在C99中引入了布尔类型,专门来表示真假。_Bool布尔类型使用的头文件 布尔类型取值:true或false.if (flag)e.各种数据类型的长度每一种数据类型都有一个长度,不同长度的量使用范围有所不同。

2023-10-11 13:25:54 722 10

空空如也

空空如也

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

TA关注的人

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