自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 结构体对齐

先介绍三个概念:自身对齐值、指定对齐值、有效对齐值。自身对齐值:数据类型本身的对齐值,例如char类型的自身对齐值是1,short类型是2;指定对齐值:编译器或程序员指定的对齐值,32位单片机的指定对齐值默认是4;有效对齐值:自身对齐值和指定对齐值中较小的那个。对齐有两个规则:1、不但结构体的成员有有效对齐值,结构体本身也有对齐值,这主要是考虑结构体的数组,对于结构体或者类,要将其补齐为其有效对齐值的整数倍。结构体的有效对齐值是其最大数据成员的自身对齐值;2、存放成员的起始地址必须是

2020-08-28 13:14:52 145

原创 robin_karp字符串匹配算法

前言 Rabin-Karp字符串匹配算法和前面介绍的《朴素字符串匹配算法》类似,也是相应每一个字符进行比較。不同的是Rabin-Karp採用了把字符进行预处理,也就是对每一个字符进行相应进制数并取模运算,类似于通过某种函数计算其函数值,比較的是每一个字符的函数值。预处理时间O(m)。匹配时间是O((n-m+1)m)。Rabin-Karp算法的思想:如果待匹配字符串的长度为M,目标字符串的长度为N(N>M); 首先计算待匹配字符串的hash值,计算目标字符串前M个字符的ha...

2020-08-20 10:35:32 422

原创 c++中构造函数为什么不能是虚函数

在C++中,只有在知道构造的对象的具体类型后,才能调用相应的类的构造函数,这是在编译的时候就确定的,而虚函数是动态绑定的,这和构造函数相矛盾。

2020-08-18 10:34:40 452

原创 深拷贝和浅拷贝

//拷贝函数有两种:深拷贝 浅拷贝//当出现类的等号赋值时,会调用拷贝函数,在未定义的显示拷贝构造函数的情况下,系统会调用默认的拷贝函数----浅拷贝//能够完成成员的复制//当成员数据中没有指针时,浅拷贝是可以的,但当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针指向同一个地址,//当对象快结束的时候,会调用两次析构,而导致指针悬挂现象。所以,这时必须采用深拷贝,深拷贝与前拷贝的不同在于//深拷贝会在堆内存中申请空间来存储数据,从而也就结局了指针悬挂的问题。简而言之,当数据成员中有

2020-08-11 11:14:25 195

原创 C++中的虚函数

(一)、虚函数的实现:在有虚函数的类中,类的最开始部分是一个虚函数表的指针,这个指针指向一个虚函数表,表中放了虚函数的地址,实际的虚函数在代码段(.text)中。当子类继承了父类的时候也会继承其虚函数表,当子类重写父类中虚函数时候,会将其继承到的虚函数表中的地址替换为重新写的函数地址。使用了虚函数,会增加访问内存开销,降低效率。(二)、多态:多态的实现主要分为静态多态和动态多态,静态多态主要是重载,在编译的时候就已经确定;动态多态是用虚函数机制实现的,在运行期间动态绑定。举个例子:一个父类类型的指针指向

2020-08-10 23:14:53 63

原创 Linux下高并发C++网络编程

1:https://zhuanlan.zhihu.com/p/936096932:https://blog.csdn.net/lewis1993_cpapa/article/details/80589717

2020-08-06 15:56:43 297

原创 http协议详解

1:https://www.cnblogs.com/ranyonsue/p/5984001.html2:https://www.cnblogs.com/an-wen/p/11180076.html

2020-08-04 20:17:34 83

原创 tcp/ip协议

mac地址和ip地址详解:https://blog.csdn.net/kenjianqi1647/article/details/81636898tcp/ip协议详解:https://developer.51cto.com/art/201906/597961.htm

2020-08-04 17:14:51 71

原创 归并排序C++代码

void merge(vector<int> &arr, int left, int center, int right){ int n=right-left+1;//临时数组存合并后的有序序列 vector<int>tmp(n,0); int i=0; int _left=left; int _right=center+1; while(_left<=center && _right<=right.

2020-08-01 23:21:21 135

原创 快速排序C++代码

//快速排序(从小到大)void quickSort(int left, int right, vector<int>& arr){ if(left >= right) return; int i, j, base, temp; i = left, j = right; base = arr[left]; //取最左边的数为基准数 while (i < j) { while (arr[j] >= base && i <..

2020-08-01 21:03:31 175

原创 堆排序C++代码

#include<iostream>#include<vector>using namespace std; // 递归方式构建大根堆(len是arr的长度,index是第一个非叶子节点的下标)void adjust(vector<int> &arr, int len, int index){ int left = 2*index + 1; // index的左子节点 int right = 2*index + 2;// index的.

2020-08-01 21:00:13 269

原创 多人聊天室

https://blog.csdn.net/weixin_41423378/article/details/82228177?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v25-16-82228177.nonecase

2020-07-31 23:00:52 73

原创 socket聊天代码

https://www.cnblogs.com/wuyepeng/p/9737583.html

2020-07-31 21:27:41 77

原创 Linux下的socket网络编程

(摘抄笔记)select函数在编程的过程中,经常会遇到许多阻塞的函数,好像read和网络编程时使用的recv, recvfrom函数都是阻塞的函数,当函数不能成功执行的时候,程序就会一直阻塞在这里,无法执行下面的代码。这时就需要用到非阻塞的编程方式,使用select函数就可以实现非阻塞编程。 select函数是一个轮循函数,循环询问文件节点,可设置超时时间,超时时间到了就跳过代码继续往下执行。 1 intselect(intnfds, fd_...

2020-07-31 20:57:28 114

空空如也

空空如也

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

TA关注的人

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