自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 lambda捕获列表是否可以传递this

从C++ Primer p352页可以看出在捕获列表中可以将this指针以值的方式传递,而不可以将this指针以引用的方式传递。思考:从前面我们学习类类型的this指针的时候就知道this指针的类型是类名* const类型的变量,如果将this指针以引用的方式传递给捕获列表则lambda的主题中就可以将this指针修改掉,所以不可以将this以引用方式传递。代码如下:class Test{ public: Test(/*Test* const this*/) { auto f1 =.

2021-03-14 22:33:42 598

原创 顺序容器比较及使用优先级

顺序容器的类型:vector,string,deque,list,forward_list,array;顺序容器的比较:vector:可变数组大小,支持任意位置的访问,尾插元素较为容易,其他插入较慢;string:与vector相似的容器,专门用来保存字符的容器,随机访问较快,尾插较快,其他插入较慢;deque:双端队列,支持随机访问,尾部和头部的插入/删除较快list:双向链表,支持任意位置的插入,效率较高,可以双向顺序查找元素,无法随机访问;forward_list:单向链表,只可以单项顺

2021-03-03 17:06:15 284 2

原创 探究C++类成员函数的编译次序

文章目录一、C语言函数的寻找次序二、C++语言类中函数的编译次序1.代码2.分析总结一、C语言函数的寻找次序//法一:调用Test成功int Add(int left,int right){ return left + right;}void Test(){ int num1 = 1; int num2 = 2; int ret = Add(num1,num2); printf("ret = %d\n",ret);}//法二:调用Test成功int Add(int left

2021-02-15 15:57:45 710 2

原创 我难道不配拥有函数体吗?---【纯虚函数函数体】

纯虚函数可以拥有函数体吗?class A{public://报错,函数在定义上有pure指定virtual void f1()=0{};};但是在类内定义不了在类外也定义不了吗?class A{public:virtual void f1()=0;};void A::f1(){cout << A::f1()<<endl;}//编译通过总结:纯虚函数在函数可以拥有函数体,但是类中只可以写纯虚函数的声明,纯虚函数的定义必须写在类外。...

2020-12-13 20:09:28 450 1

原创 网络编程之listen深入剖析

#include <sys/socket.h> int listen(int s, int backlog);listen的第一个参数为待监听的套接字,第二个参数是已连接队列的大小。listen函数调用后本质会维护两个队列,一个是半连接状态的,一个是已完成连接队列,再unix网络编程中提及listen的第二个参数是维护的两个队列之和,如果你使用man手册查看之后就会有新的认识。半连接队列的大小通过man手册我们知道可以任意修改,但是是不是通过参数给多少,已完成队列就是多大呢.

2020-12-10 22:33:51 666

原创 浅谈C++多态

多态:多态指一种事物有多种状态,如车有奔驰宝马,人有学生老师;多态分类静态类型多态:静态类型多态也称作编译期间多态,指在编译期间完成后,就已经确定了调用那一方法,如果存在则调用,如果不存在,则编译错误。函数重载(普通函数的重载&成员函数的重载)//普通函数的重载int add(int left,int right){ return left + right;}double add(double left,double right){ return left + right

2020-12-09 17:04:45 132

原创 拷贝构造函数&赋值运算符重载

拷贝构造函数(复制构造函数):只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用

2020-08-14 17:26:25 638

原创 进程控制1

进程创建:fork函数–>创建子进程函数返回值失败小于0,表示创建失败成功大于0,返回给父进程等于0,返回给子进程原理:子进程拷贝父进程PCBint vfork()函数 -->创建子进程的函数

2020-08-10 14:27:30 152

原创 进程初接触(进程概念)

进程概念:1.冯诺依曼体系结构2.操作系统概念3.进程概念内核怎么描述进程(task_struct),创建子进程,写时拷贝,进程虚拟地址空间冯诺依曼体系结构第一个思想:所有的数据在内存中存储的时候,采用2进制的方式进行存储中央处理器的数据来源于存储器《深入理解计算机系统》:(cpu --> 寄存器 —> 缓存 —> 内存)操作系统:1.操作系统本身就是一个软件,管理计算机的软硬件资源;2.操作系统 = 操作系统内核 + 一组应用用户调用库函数或者系统调用交

2020-08-04 23:25:38 204

原创 简易理解构造函数&析构函数

初始化理解:给对象开辟空间&给开辟的空间赋初始值eg:int a;//不是初始化int a = 10;//初始化int a(10);//初始化构造函数:构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。构造函数是一个特殊的成员函数:1.构造函数的名字必须与类名相同2.构造函数没有返回值,即使void也

2020-08-02 21:36:21 239

原创 类的定义&访问权限

如何定义一个类:在C++中,struct和class都可以用来定义类class 类名{类的成员:成员函数和成员变量};如果将类的成员函数声明和定义都放在类中来实现缺陷:1.可能导致编译器将次成员函数当成内联函数来处理2.如果将声明和定义都放在类中实现的类类型放在头文件中,当头文件在多个源文件中包含时,就会产生重复定义导致编译失败改正措施:将类的声明和定义分离开来,头文件中类中的成员函数仅仅放置声明,成员函数的定义放在源文件中注意:成员函数在类外定义时,成员函数名前必须要加类名::(作

2020-07-31 15:38:21 993

原创 linux2

shell:命令行解释器统称:常用的命令行解释器叫做bashshell做什么事情?1.将命令呈递给操作系统内核2.将操作系统内核的结果展示给用户权限:管理员用户:root用户 其他都是:普通用户1.linux操作系统当中权限分为三种,可读权限(r),可写权限(w),可执行权限(x);2.linux操作系统当中一个文件或者一个文件夹的权限会针对三类用户2.1当前文件的所属者 2.2当前所属组用户 2.3其他用户- rw- rw- r–//第一个为文件类

2020-07-28 08:58:05 213

原创 linux初接触

Linux操作系统1.一切皆文件2.文件存储相当于一个树形结构(倒着的)“/”:根目录(相当于Windows机器中的“计算机”);“.”:代表当前路径(代表当前目录)查看网卡信息;ifconfig查看文件或者文件夹内容:lsls -lls -a(查看隐藏文件)1.隐藏文件以.开头2.“.”:代表当前路径“…”:代表上级目录3.pwd 查看文件当前所在目录()/root:root用户的家目录(root用户是管理员用户)/home/alice:alice用户的家目录(alic

2020-07-25 13:12:59 259

原创 宏的优缺点以及解决办法

宏常量:为了实现简单,会定义宏常量优点:1.一改全改,2.降低出错率,3.可读性高,缺点:在预处理阶段进行替换,不会进行类型检测,安全性低(如果写错因为在预处理阶段不会在文件定义宏处报错,而会在使用处报错);建议:尽量使用const修饰的常量替换宏常量宏函数:优点:1.不是函数,少了函数调用,提高程序运行效率,2.少写代码:因为宏函数是多条语句的封装—注意:不能提高代码复用率,因为宏函数在预处理阶段就展开了3.可以提高代码的可读性缺点:1.在预处理阶段被替换,不会进行类型检测,代码安全性

2020-07-24 08:38:36 2690 2

原创 归并排序及排序拓展

归并排序递归代码实现归并:void _MergeDate(int* array,int left,int mid,int right,int* temp){ int index1 = left; int index2 = mid; int index = left; while(index1<mid && index2<right) { if(array[index1]<=array[index2]) temp[index++] = array[i

2020-07-14 12:05:32 176

原创 快速排序

快速排序:数据分割:hore提出快排思想的大佬取区间最左侧或者最右侧的数据为基准值;(用begin标记数组最前面的元素,end标记最后面的元素,begin从前往后移动,end从后往前移动,如果begin和end没遇到或者没有错过,begin找到一个比基准值大的就停止,end找到一个比基准值小的就停止,交换begin和end所指元素最后交换相遇位置的和最右侧的元素 );//分割代码//hoare:提出快排思想的大佬提出的int partion(int* array, int left, int r

2020-07-12 08:45:34 226

原创 数据结构---排序

排序:排序算法的稳定性内部排序算法和外部排序算法排序算法的实现原理,代码实现,稳定性,时间复杂度,空间复杂度,应用场景插入排序:时间复杂度:最优O(N)最差O(N^2);插入排序有最优的场景:如果数据的序列与用户所需序列是接近相同,比如:用户要升序,序列就是一个升序序列—>O(N);最差场景:用户需要升序,数据恰好是降序—>O(N^2);代码实现:void InsertSort(int* array, int size,Cmp cmp){ int i = 1; for

2020-07-11 14:44:10 125

原创 二叉树的建立

二叉树的创建的函数实现需要的参数为一段数组,数组元素个数,索引—>必须传址要递归改变索引值(index从0-(size-1)),无效值(‘#’)CreateTree:```cTypedef struct Tree{int val;struct Tree* left;struct Tree* right;}Tree;//申请节点Tree* Buyroot(int date){ Tree* root = (Tree*)malloc(sizeof(Tree)); if(root=

2020-07-07 17:37:21 135

原创 堆的实现

1.建堆a.根据元素个数初始化对空间b.将数组中的元素拷贝到堆结构中的连续空间—完全二叉树c.对堆结构进行调整,让其满足堆的性质**>>1.找完全二叉树中倒数第一个非叶子节点(刚好是最后一个节点的双亲):lastNotLeaf = (size-1-1)/2 = (size-2)/2;2.从lastNotLeaf节点位置向前一直调整到根节点的位置:每个节点都进行向下调整向下调整:必须满足左右子树都满足堆的性质void AdjustDown(int* array,int size,

2020-06-17 16:25:24 192

原创 顺序表和链表的区别

顺序表和链表的区别相同点1.都是线性表2.元素在逻辑上都是连续的(存储上顺序表连续,链表不连续)3.每个元素都有唯一的前驱和唯一的后继(注意:第一个元素没有前驱,最后一个元素没有后记—>循环链表除外)不同点1.底层存储空间不同:顺序表底层存储空间连续;链表不连续;2.插入和删除的方式不同:顺序表插入和删除得搬移后面的所有元素,效率低,时间复杂度为O(N);链表不需要搬移后面的元素,效率高,时间复杂度位O(1);3.随机访问:顺序表底层空间连续,支持随机访问,访问元素时

2020-06-07 22:57:09 2287 1

原创 带环单链表+带环单链表

带环单链表+带环单链表判断相交若共用一个环则相交,若不共用则不相交-求解相交点判断是否带环定义快慢指针,快指针一次走两步,慢指针一次走一步;若快指针走完,慢指针走到一半(奇数为中间的节点,偶数为中间的两个中的后一个节点)则无环。若有环,快指针必定先入环,当快指针在环中走n圈时(n = 0,1,2,3…)慢指针入环,由于快指针一次走二步慢指针走一步,在环中慢指针与快指针距离总减少一步,减少一个节点,当慢指针还未走完一圈时,快指针追上慢指针,两者相等,则必定有环。求带环指针的入口节点设链表

2020-06-03 17:24:01 175

原创 无环单链表+有环单链表(有环单链表+无环单链表)

无环单链表+有环单链表or有环单链表+无环单链表判断相交必定不相交

2020-06-03 16:35:16 322

原创 无环单链表+无环单链表--相交

单链表+单链表–相交判断相交若末节点相同则相交,不相同则不相交求解相交点1.遍历链表目的:移动链表到最后一个节点判断是否相交+判断链表长度;2.将长链表向下移动两链表差值个节点3.用两个指针从短链表的头和长链表的当前位置(头位置向下移动两链表差值的位置)开始移动;从头开始判断是否相等,然后每移动一次判断连个链表是否相等,若相等,当前节点位置则为两链表相交位置;...

2020-06-03 16:24:16 276

原创 单链表相交条件

求两个链表是否相交分析:链表分为有环链表和无环链表两链表的组合有:1.无环+无环2.无环+有环3.有环+无环4.有环+有环无环+无环分析:若两个无环+无环相交则链表一必定在某个节点处与链表二节点相同相交条件:链表的最后一个节点是否相同;无环+有环分析:若无环+有环相交,无环链表一的最后一个节点必定链接在有环链表二中,由于有环链表二无最后一个节点,相交无环链表末尾必成环,与无环矛盾,所以无环+有环必定不相交;有环+无环与上述无环+有环相同;有环+有环分析:有环+有

2020-06-03 16:09:25 139

原创 c语言学习之路

一.c语言switch语句。List item一个简单的switch语句switch(ticket_number){ case 35: printf("congratulations!You win first prize!"); break;case 122: printf("You are in luck - second prize."); break;case 7...

2019-10-03 17:27:44 175

空空如也

空空如也

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

TA关注的人

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