自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 STL容器删除元素

这些容器都是连续内存的容器,删除一个会发生平移操作,由于容器中可能有多个指定值的元素,上述删除方法可以只移动一次,然后把指定值全删除掉。使用成员函数erase(),因为关联型容器底层都是平衡二叉树结构。因为list是链表形式的,直接remove就很高效。对于 vector、deque、string。

2024-04-15 11:01:52 203 1

原创 Linux一切皆文件

尝试去理解 “Linux 下一切皆文件”

2023-09-13 15:31:50 67

原创 C++内存管理

本身进程的地址空间就只有4个G,那在这里我估计分配给VS的就只有2个G,但是呢又不是实打实的2个G,所以呢将内存申请完了之后就返回了NULL。这一块就要重点讲一讲了,若是我们直接去释放掉这块空间的话,即这个对象在【堆区】中的空间就找不到了,那么这个_array就变成了一个野指针,此时若再去调用【析构函数】的话就会出现大问题,所以说我们要先去调用析构函数释放掉_array所指向的这块堆区中的空间,然后再使用operator delete去释放掉这块空间,这即是[delete]的调用原理。

2023-09-12 10:03:32 56

原创 二叉搜索树

③该节点有两个孩子,找比它自己的左孩子大,比它自己的右孩子小的节点替换它(也就是拿它的左子树的最大节点或右子树的最小节点替换它),替换之后,该节点就只有一个孩子或没有孩子了,就变成①或②了。二叉搜索树又叫二叉排序树,二叉树顾名思义就是一个树根上生出左右两个树杈,左边的叫左子树,右边的叫右子树,二叉搜索树要么是一棵树,要么具备一下性质。②该节点有一个孩子,就把该节点的孩子节点的链接给该节点的父亲,顶替自己的位置,①可以当成②的特殊情况。(2)查询英文单词时,只需给出英文单词,就可快速找到与其对应的key。

2023-09-11 14:11:04 53

原创 STL之vector模拟实现

假如不写vector类的拷贝构造函数,那么编译器自动生成的默认拷贝构造函数只能完成浅拷贝,vector类的3个成员变量的类型都是T*,如果T是内置类型,那么拷贝OK;使用现代的拷贝构造时必须初始化,否则_start、_finish、_end_of_storage都是随机值,拷贝数据时可能会导致越界。在析构时,vector的每个元素析构两次,那么同一块空间会被释放两次,程序会崩,因此,使用以下代码直接将vector元素值拷贝过来即可。①如果T是内置类型,使用memcpy拷贝完全OK,析构时不需要清理资源;

2023-09-08 16:19:27 49 1

原创 C++string

注意:必须要在初始化列表进行初始化 ,否则交换完毕后tmp出了拷贝构造函数作用域会调用析构函数释放tmp在堆上申请的空间,因为如果_str没有被初始化为空指针,那么_str就是随机值,交换后,tmp对象的成员_str也是随机值,随机值的空间时不可以被释放的,会导致不可预知的错误;char要加&,如果不加,那么return就是传值返回,返回的是_str[i]的拷贝,即临时对象,而临时对象具有常性,不能被修改,只能读;①_size < n <_capacity,无需增容,直接将_size到n位置置为val。

2023-09-08 15:57:42 25 1

原创 五种通信总线

降低信号干扰(共模干扰,即一根线为地线,另一个线的高低电平表示1和0)再浅显的说,比如一条线电压为15V,但由于线长而受干扰变为0V了,如果是共地那种那么就会导致信号出错,而如果是差分信号,另一跟线也会受到同种影响(比如上例H的5V变0V,必然的也会有L的0V变为-5V,作差后结果并不会受到影响)但是如果前一件事卡在那做不了,没关系,后面的事情可以接着做,不用跟着遭殃。2、发数据前,先发低电平的起始位,接下来是数据位发送数据,串口规定先发低位再发高位(比如0x55,即01010101,所以先发低位1)

2023-09-08 13:28:52 715 1

原创 二叉树C语言

对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。查找时,每次都和根节点比较,如果比根节点小,就去左子树查找,否则去右子树查找,最多查找高度次,因此查找的时间复杂度为O(N)。双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点。孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点。若规定根节点的层数为1,具有n个结点的满二叉树的深度,(log以2为底,n+1为对数)i=0,i为根节点编号,无双亲节点。

2023-09-06 16:24:58 34 1

原创 队列C语言

分析:栈的性质是后进先出,如先后入栈1,2,3,4,可以依次将其入到A队列中,如要4出队列,可以先将1,2,3放入B队列,返回A队列中的4。可以使用数组和链表的结构实现队列,使用链表的结构实现更优一些,因为如果使用数组的结构实现队列,那么删除数据在队头进行,效率比较低,队列为空时,front=rear=NULL。分析:用两个栈实现队列,队列先进先出,如入队1,2,3,4,将其依次入到A栈,要出队,就要先出1,此时可以将2,3,4入栈到B栈,A栈中只留下1,1就可以从A栈出了。再入数据就入到不为空的队列里。

2023-09-06 15:22:56 32 1

原创 栈C语言实现

栈是一种特殊的线性表,只允许在固定的一段进行插入和删除元素操作。进行数据插入和删除的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFOA(Last In First Out)的原则。栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作也叫出栈,出数据也在栈顶。

2023-09-06 15:18:41 18 1

原创 双向链表C语言

【代码】双向链表C语言。

2023-09-06 15:16:38 15 1

原创 单链表C语言

因此要定义3个节点,n1和n2用于翻转,n3用于迭代:n1指向NULL,n2指向n1,n3用于记录n2的下一个结点。(1)要删除某一结点,需要保存该结点的前一个结点(删除当前节点后,前一结点应指向当前结点的下一结点),同时需要保存当前结点的下一结点(删除当前结点后,能够继续向后访问该链表)3、空间浪费:增容一般增至原来的2倍大空间,会有空间浪费,假如当前容量为100,满了以后增容到200,再继续插入了5个数据,后面没有插入数据了,这就浪费了95个空间。(逻辑结构是想象的,物理结构是内存中实际存储的)

2023-09-06 15:14:18 25 1

原创 顺序表C语言

nums1和nums2有一个走完就不用比较了,因此进入循环的判断条件是nums1和nums2的下标同时要>=0,当有一个不满足条件时,表明有一个数组走完了。如果从左侧开始比较,如果nums2的数据值<nums1的数据值,那么nums2的数据值放在nums1的对应位上,nums1的数据就会被覆盖,找不回来了,如下图所示。顺序表含义及特点:顺序表本质是数组,是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储,在数组上完成数据的增删查改,顺序表要从左往右连续存储数据。

2023-09-06 14:12:00 25 1

原创 动态内存管理

内存可以这样开辟://在栈空间上开辟4个字节//在栈空间上开辟10个字节的连续空间但是这样的开辟空间方式有两个特点:1、开辟的空间大小是一定的2、数组在声明时必须指定数组的长度,所需要的内存会在编译时分配,如果所需空间大小在运行时才确定,那么数组编译时开辟空间的方式就不能满足了,这时就需要动态开辟空间,动态开辟申请的空间位于堆区。

2023-09-06 11:32:11 22 1

原创 如何判断机器是大端还是小端

a的地址为int类型的指针,指向整数a,a为4字节,将指针强转为char类型,截取最后一个字节:(1)如果最后一个字节值为1,说明低地址存放低字节,机器为小端字节序;(2)反之,如果最后一个字节值为0,说明低地址存放高字节,机器为大端字节序。把数据的低位字节内容放在高地址处,高位字节内容放在低地址处。把数据的低位字节内容放在低地址处,高位字节内容放在高地址处。(3)如何判断机器是大端还是小端。printf(“小端”);printf(“大端”);

2023-09-06 09:33:11 63 1

原创 字符串函数的使用

1、stelen函数strlen函数的原型是strlen(char const *string);strlen返回的是一个无符号整数类型。计算字符串参数的长度:#include<stddef.h>size_tstrlen(char const *string){int length;for(length = 0;*string++ != ‘\0’????length += ...

2019-10-14 10:56:15 343

原创 类型转换

按位运算符的本质理解:按位与运算符(&):参加运算的两个数据,按二进制位进行“与”运算,运算规则为:0&0=0,1&1=1,0&1=0;即两位同时为“1”时,结果为1,否则为0;例如:3&5 即00000011&00000101 = 00000001,因此3&5 = 1;另外负数按补码形式参加按位与运算;与运算的特殊用途:(1)清零,如...

2019-10-12 10:19:58 135

原创 动态变量与静态变量的区别

什么是局部变量:定义在函数中的变量普通局部变量:定义时直接定义,或者在前面加上(auto)关键字void func1(void){int i = 1;i ++;printf(“i = %d\n”,i);}局部变量i的解析:在连续三次调用func1,每次调用时,在进入func1中都会创造一个变量i,并且会给i赋予初值,然后i++时i加成2,然后printf打印出i的值2,然后func...

2019-10-12 10:17:06 2107

原创 C语言

记录一下学习C语言的过程,分享一下C语言的知识1、数组和指针的区别众所周知数组和指针的关系是很大的,肯定有很多人认为数组和指针并没有什么区别,这次就来说说数组和指针的区别;先看下面两个声明;int [5];int *b;他们可以互换吗:他们都具有指针值,他们都可以进行间接访问和下标引用操作,但是他们的区别还是很大的。声明一个数组时,编译器将会根据所声明的数量为数组保留内存空间,然后在创建...

2019-10-12 09:54:37 71

原创 CNN

1、CNN的基本模块CNN由输入层输出层及多个隐藏层组成,隐藏层可以分为卷积层、池化层、RELU和全连通层。1、1输入层CNN的输入层一般湿二维向量,可以有高度,比如RGB图像。1、2卷积层卷积层是CNN的核心,层的参数由一组可学习的滤波器(filter)或内核(kernels)组成,他们具有小的感受野,延伸到输入容积的整个深度。在前馈期间,每个滤波器对输入进行卷积,计算滤波器和输入之间...

2019-09-06 11:34:47 1317

空空如也

空空如也

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

TA关注的人

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