自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 list(介绍与实现)

1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与非常相似:最主要的不同在于是单链表,只能朝前迭代,已让其更简单高效。4.与其他的序列式容器相比(arrayvectordeque)list通常在任意位置进行插入、移除元素的执行效率更好。5.与其他序列式容器相比,list和。

2023-08-27 18:06:22 1809

原创 vector(介绍)

1. vector是表示可变大小数组的序列容器。2.就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3.本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。

2023-08-21 22:12:52 263

原创 string(模拟实现与深拷贝)

如果,最后就会。就像一个家庭中有两个孩子,但父母只买了一份玩具,两个孩子愿意一块玩,则万事大吉,万一不想分享就你争我夺,玩具损坏。。父母给每个孩子都买一份玩具,各自玩各自的就不会有问题了如果一个类中涉及到资源的管理,其拷贝构造函数、赋值运算符重载以及析构函数必须要显式给出。一般情况都是按照深拷贝方式提供。(下图来源于网图)写时拷贝就是一种拖延症,是在浅拷贝的基础之上增加了引用计数的方式来实现的。引用计数:用来记录资源使用者的个数。在构造时,将资源的计数给成1。

2023-08-21 21:50:14 131

原创 string类(初识)

目录1. 为什么学习string类?1.1 C语言中的字符串2. 标准库中的string类2.1 string类(了解)2.2 string类的常用接口说明1. string类对象的常见构造 2. string类对象的3. string类对象的访问及遍历操作 4. string类对象的修改操作5. string类非成员函数6. vs和g++下string结构的说明(图片来源于网图) (图片来源于网图)

2023-08-18 21:45:40 202

原创 C/C++内存管理

什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现。中可以继续使用,但有些地方就无能为力,而且使用起来比较麻烦,因。的共同点是:都是从堆上申请空间,并且需要用户手动释放。在申请的空间上执行构造函数,完成对象的构造。在申请空间后会调用构造函数完成对象的初始化,该段内存的控制,因而造成了内存的浪费。

2023-08-18 21:33:41 149 1

原创 类和对象(结尾)

它不属于外部类,更不能通过外部类的对象去访问内部类的成员。在传参和传返回值的过程中,一般编译器会做一些优化,减少对象的拷贝,这个在一些场景下还。友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。,参见友元类的定义,内部类可以通过外部类的对象参数来访。问外部类中的所有成员。可以这么定义匿名对象,匿名对象的特点不用取名字,

2023-08-18 18:11:04 148

原创 类与对象(加深)

如果类中没有申请资源时,析构函数可以不写,直接使用编译器生成的默认析构函数,比如Date类;下面的程序我们会看到,编译器生成的默认析构函数,对自定类型成员调用它的析构函数。这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需。关于编译器生成的默认成员函数,很多童鞋会有疑惑:不实现构造函数的情况下,编译器会。通过前面构造函数的学习,我们知道一个对象是怎么来的,那一个对象又是怎么没呢的?是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任。

2023-08-12 22:07:44 156

原创 类与对象(入门)

C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。2.类的引入C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。比如:之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;现在以C++方式实现,会发现struct中也可以定义函数,而结构体的定义,在C++中更喜欢用class来代替3.类的定义classclassName//类体:由成员函数和成员变量组成//一定要注意后面的分号。

2023-08-12 21:54:58 222

原创 C++入门

C++是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。熟悉C语言之后,对C++学习有一定的帮助1. C++关键字C++总计63个关键字,C语言32个关键字关键字如下(此图来源网图)2.命名空间在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化以避免命名冲突或名字污染namespace。

2023-07-28 16:48:13 114 1

原创 堆排序与直接选择排序

1.直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用2.时间复杂度:O(N^2)3.空间复杂度:O(1)4.稳定性:不稳定。

2023-07-23 20:15:46 105

原创 归并排序与计数排序

Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。思想:计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用。的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题。计数排序在数据范围集中时,效率很高,但是适用范围及场景有限。)是建立在归并操作上的一种有效的排序算法。根据统计的结果将序列回收到原来的序列中。统计相同元素出现次数。该算法是采用分治法(

2023-07-23 20:01:14 261

原创 冒泡排序与快速排序(交换排序)

所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。

2023-07-23 18:39:57 99

原创 希尔排序与直接插入排序

把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。的排序码顺序进行比较,找到插入位置即将。的取值方法很多,导致很难去计算,因此在好些树中给出的希尔排序的时间复杂度都不固定。元素集合越接近有序,直接插入排序算法的时间效率越高。array[i]插入,原来位置上的元素顺序后移。时都是预排序,目的是让数组更接近于有序。希尔排序是对直接插入排序的优化。时,数组已经接近有序的了,这样就。希尔排序的时间复杂度不好计算,因为。,它是一种稳定的排序算法。

2023-07-18 17:57:21 48

原创 栈和队列的学习

队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出。栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的。入队列:进行插入操作的一端称为。出队列:进行删除操作的一端称为。出栈:栈的删除操作叫做出栈。栈中的数据元素遵守后进先出。压栈:栈的插入操作叫做进栈。栈的实现一般可以使用。

2023-07-13 13:47:18 35

原创 带头双向循环链表的增删查改

今天我将为大家讲述带头双向循环链表的逻辑功能以及实现。

2023-07-12 18:09:57 36

原创 C语言预处理

所以用于对数值表达式进行求值的宏定义都应该用这种方式加上括号,避免在使用宏时由于参数中。对于宏,参数名被他们的值所替换。机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(在调用宏时,首先对参数进行检查,看看是否包含任何由。最后,再次对结果文件进行扫描,看看它是否包含任何由。定义的符号的时候,字符串常量的内容并不被搜索。定义标识符的时候,后面建议不要加“;的操作符或邻近操作符之间不可预料的相互作用。如#define MAX 1000;但是上面的接受不严谨,容易产生错误。

2023-04-14 17:42:17 36

原创 C语言文件操作

当程序运行起来的时候,可以增加、删除数据,此时数据是存放在内存中,当程序退出的时候,程序中的数据自然就不存在了,使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。字,文件状态及文件当前的位置等)。每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是。在编写程序的时候,在打开文件的同时,都会返回一个。

2023-04-14 17:28:18 39

原创 结构体的学习

int price;}name;int price;}name1;

2023-03-20 09:47:14 47

原创 模拟实现一些库函数(strcmp,strstr,memcpy,memmove等)

模拟实现库函数,需要首先明白这个函数的用处,它是用来干什么的,使用对象是谁,有几个,都是什么类型,有什么特殊的地方,知道了这些,才能真正做到模拟函数提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

2023-03-17 10:14:45 43

原创 数据的存储的学习

数据的存储的学习笔记

2023-02-25 11:30:09 33

原创 扫雷(C语言)

用C语言实现扫雷

2023-01-30 15:25:29 85

原创 三子棋(C语言)

用C语言实现三子棋

2023-01-30 14:49:09 37 1

原创 蛙的笔记,scanf的小小知识点

scanf在读取字符串时,如果字符串中间有空格的话,会自动结束相当于\0

2022-12-12 21:38:31 68

原创 蛙的笔记,神奇的%g

%g是一个非常实用的格式符,可以起到%f跟%d的结合作用在输出的时候,使用%g会有什么样的作用呢,如果想要输出一个小数,但是又不想出现后面带很多0显得很多余,我们可以选择使用%g作为格式符,例如它可以把1.000000变成1,把2.500000变成2.5。因为%g可以把数字进行格式化,处理一下。它将后面无用的0全部舍去了,可以在很多时候更好的满足题目的要求。就像,4.0+6.0要是使用%f输出,你将会得到10.000000,而很多时候我们并不想要小数点末尾这么多的0,或许你会选择强制转换

2022-12-11 22:41:41 899

原创 蛙的笔记,全局变量的初始化很特殊

初始化是定义的变量第一次赋值,按道理说那么第二次赋值就是普通的改变了,但是全局变量跟局部变量在这方面就不一样了。如:这种局部变量的改变没有问题但是这种全局变量的第二次赋值却会显示错误——重复初始化。也就全局变量只能赋值一次。然而像下面这在函数内部改变却没有问题希望大家跟发表一些有关的评论解释一下,萌新蛙是无力解决了(๑>؂<๑)

2022-12-09 11:03:05 127 1

原创 蛙的笔记,scanf接受%c的知识点

scanf("%c",&c),你输入了'a',但是a前面实际上是有个空格的,空格被c接受了,a就不会被接受。控制符前如果没空格,那c就接受了空格,这个可以防止误操作,忽略空格输入,接受第一个非空格输入。注意事项:对于scanf()而言,%c是个较为特殊的说明符。我们在接受%c时应该以 scanf(" %c",&c),这样的形式。(%c前有一个空格)

2022-12-07 11:33:20 463 1

原创 蛙的第一声呱呱

各位读者友友们好啊,这是蛙的第一篇介绍自己的博客。代码不息,小白初到。作为一名刚刚接触计算机内部世界的萌新,这个极微又宏大的世界颠覆了我对以前对电脑的认识(游戏๑乛v乛๑嘿嘿)。为了不在代码的海洋中弄翻自己的小船,我决定给自己定一个大大的目标\^O^/!我喜欢代码,理性又完美,严谨又生动。我的目标就是要在不知多久的将来,用代码完成一个属于自己的世界,构架起独属于自己的app,让无数人都知道它用过它,给无数人带来便利!今后我给自己定的计划是要保证每天都能收获新知识,保证自己一直坚定不移的前进,无论

2022-12-02 12:15:27 172

原创 蛙的笔记,实参形参知识点

实参可以是常量、变量、表达式、函数等任意类型,形参只能是变量,在被定义的函数中,必须指定形参的类型。

2022-11-20 14:39:46 115

原创 蛙的笔记,数据类型转化知识点

表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度。因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。通用CPU(general-purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsigned int,然后才能送入CPU去执行运算。

2022-11-17 17:14:39 47

原创 蛙的笔记,逻辑与知识点

用逻辑与判断真假,一旦发现符号左边表达式为假,立马判断为假,后面的表达式不计算,但左边的表达式还是要计算#include <stdio.h>int main(){int i = 0, a =0, b=2, c=3,d=4;i =a++ && ++b && d++;printf("a = %d\n b = %d\n c =%d\nd = %d\n", a, b, c, d);return 0;}a=1b=2c=3d=4

2022-11-17 14:53:37 41

原创 蛙的笔记,数组知识点

1.sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组。2.&数组名,取出的是数组的地址。&数组名,数组名表示整个数组。此1,2两种情况之外,所有的数组名都表示数组首元素的地址。

2022-11-12 20:33:54 59

原创 蛙的笔记,数组知识点

如果想传递整个数组,需要将数组的长度也传入进去(写在数组后面不要忘记加逗号),否则只会传递第一个值

2022-11-12 20:07:59 37

原创 蛙的笔记,数组地址知识点

int arr[20];arr++是无法被编译器识别的的,arr在运算中表示数组arr的首地址,arr++会给arr重新赋值,导致数组首地址改变;int * i i++可以被识别,数组名arr在运算表达式中表示首元素地址 i++,表示数组偏移一个int型长度(即4个字节)char数组也是如此;arr[0]++可以通过编译,arr[0]是一个int型数据,a[0]++表示数组中的第一个值加1在放回原位

2022-11-09 20:05:33 288

原创 蛙的笔记,函数知识点

函数的递归是自己用自己,嵌套是自己用别的函数

2022-11-08 17:22:20 56

原创 蛙的笔记,变量名知识点

main函数中的变量名可以和定义函数中的变量名相同,如果相同,在自定义函数中使用该变量,以自定义函数中定义的变量为准。在自定义函数外使用变量,自定义函数中定义的变量没有作用,因为不在作用域。

2022-11-08 15:37:29 42

原创 蛙的笔记,return知识点

return后的数代表着函数返回的值,函数中无论什么地方,遇到return函数就结束了

2022-11-08 15:19:43 53

原创 蛙的笔记,返回值类型知识点

函数前的类型就是返回值类型如果不写 那么默认返回值是int只有明确写明返回值是void类型,那么才是没有返回值的

2022-11-08 15:04:59 41

原创 蛙的笔记,地址知识点

数组默认为地址不用加地址符&了

2022-11-01 19:32:31 37

原创 蛙的笔记,类型转换知识点

若int a=2 a/3是整数0 a/3.0是小数0.67

2022-10-30 17:31:45 40

原创 蛙的笔记,break知识点

break是跳出当前循环不是所有循环

2022-10-30 16:20:00 75

空空如也

空空如也

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

TA关注的人

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