自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 adb工具介绍

adb 工具介绍

2022-09-04 17:46:48 873

转载 如何把android studio中的项目发布到手机上(超详细版)

如何把android studio中的项目发布到手机上(超详细版)

2022-08-29 19:17:40 5393 1

转载 单链表和双向链表的区别与使用场景

单向链表:只有一个指向下一个节点的指针。 优点:单向链表增加删除节点简单。遍历时候不会死循环; 缺点:只能从头到尾遍历。只能找到后继,无法找到前驱,也就是只能前进。 适用于节点的增加删除。   双向链表:有两个指针,一个指向前一个节点,一个后一个节点。 优点:可以找到前驱和后继,可进可退; 缺点:增加删除节点复杂,需要多分配一个指针存储空间。 适用于需要双向查找节点值的情况。 ...

2021-10-20 11:37:57 2420

转载 利用多进程/多线程实现多个客户端同时访问同一服务器

        如果实现一客户端与服务器的交互比较容易(直接用TCP的编程流程就可以实现,只是这样写出的程序只能是一个客户端交互释放连接后其他客户端才可以与服务器交互 ),但是要实现多个客户端同时与同一服务器的交互就相对复杂一点。 我们先给出服务器处理同一客户端的多次访问的伪代码:             &nb...

2021-04-07 13:15:10 2086

转载 虚函数和纯虚函数的区别

首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数。 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。 定义一个函数为纯虚函数,才代表函数没有被实现。 定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。 1、简介 假设我们有下面的类层次: class A{public:    virtual void foo(...

2021-03-29 15:38:03 173

原创 深浅拷贝到底是什么呢

浅拷贝:所谓的浅拷贝就是拷贝指向对象的指针(拷贝出来的目标对象的指针和源对象的指针指向的内存空间是同一块空间)。浅拷贝只是一种简单的拷贝,让几个对象公用一个内存,然而当内存销毁的时候,指向这个内存空间的所有指针需要重新定义,不然会造成野指针错误深拷贝:所谓的深拷贝指拷贝对象的具体内容,其内容地址是自助分配的,拷贝结束之后,内存中的值是完全相同的,但是内存地址是不一样的,两个对象之间相互不影响,也互不干涉.我们来总结一下两者之间的原理 : 如果现在有一个A对象,拷贝之后得到一份新的对象A_C..

2021-03-29 14:08:14 618

转载 如何理解封装、继承、多态这三大特性

面向对象的三个基本特征是:封装、继承、多态。 我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是:代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。 封装:  封装是实现面向对象程序设计的第一步,封装就是将数据或函数等集合在一个个的单元中(我们称之为类)。...

2021-03-20 18:07:07 850

转载 什么是TCP粘包?怎么解决这个问题

在socket网络编程中,都是端到端通信,由客户端端口+服务端端口+客户端IP+服务端IP+传输协议组成的五元组可以明确的标识一条连接。在TCP的socket编程中,发送端和接收端都有成对的socket。发送端为了将多个发往接收端的包,更加高效的的发给接收端,于是采用了优化算法(Nagle算法),将多次间隔较小、数据量较小的数据,合并成一个数据量大的数据块,然后进行封包。那么这样一来,接收端就必须使用高效科学的拆包...

2021-03-19 19:06:54 391

转载 C++中的STL中map用法详解

Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的...

2021-03-18 15:21:14 191

转载 linux下的线程池和进程池以及线程池的实现

池 由于服务器的硬件资源“充裕”,那么提高服务器性能的一个很直接的方法就是以空间换时间,即“浪费”服务器的硬件资源,以换取其运行效率。这就是池的概念。 池是一组资源的集合,这组资源在服务器启动之初就被创建并初始化,这称为静态资源分配。 当服务器进入正式运行阶段,即开始处理客户请...

2021-03-10 17:30:08 203

转载 C++多态的实现和原理

多态的实现虚函数原理一、在编译期间实现多态多态是指在不同的条件下表现出不同的状态,C++中通过重载函数的方法可以在编译期间实现多态。在编译时编译器会根据参数列表的不同寻找合适的函数。int Add(int left, int right){ return left + right;}double Add(double left, int right){ return left + right;}int main(){Add(10, 20);Add(10.0,2

2021-03-10 17:24:46 176

转载 TCP的拥塞控制

在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫做网络拥塞。 在计算机网络中数位链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。 若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。 当输入的负载到...

2021-03-10 09:26:23 162

转载 TCP与UDP的区别(超详细)

总结 TCP是面向连接的,UDP是无连接的TCP是可靠的,UDP是不可靠的TCP是面向字节流的,UDP是面向数据报文的TCP只支持点对点通信,UDP支持一对一,一对多,多对多TCP报文首部20个字节,UDP首部8个字节TCP有拥塞控制机制,UDP没有TCP协议下双方发送接受缓冲区都...

2021-03-10 08:45:08 3327

转载 多线程与线程池的区别

线程池的概念 线程池大类总共分为4种 fixThreadPool 正规线程(传统线程池)cacheThreadPool 缓存线程池singleThreadPoll 单线程线程池(单例线程池)ScheduledThreadPoll 周期性执行任务的线程池 fixThreadPool 正规线程(传统线程池) 含有核心线程,核心线程...

2021-03-10 08:18:52 339

原创 程序员面试宝典——第五章

小编从今天开始看程序员面试宝典这本书了,听老师说这本书上的题都是很经典的面试题,而且之后的很多公司笔试面试好多都从这本书上抽取题,还有原题哦!所以大家也跟我一起来学习吧~~~下面的总结我会挑我觉得重点的或者是我看懂题目之后的心得和所学的知识把它一一整理出来,如果又不太正确的地方,小伙伴们敬请指正,相互学习呀(嘿嘿????)。这里写目录标题5.1赋值语句5.2赋值语句5.1赋值语句:面试例题1:下列C++代码的输出结果是什么?A.main()里的i是一个未定义值B.main()里的i值为1C.

2021-01-21 12:16:16 212

转载 多态是什么

多态(Polymorphism)按字面的意思就是“多bai种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4 编程技术内幕”)。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在Object Pascal和C++中都是通过虚函数(Virtual Function) 实.

2021-01-17 12:23:54 1432

原创 如何判断一个机器的大小端呢?

这里写目录标题大小端什么是大端小端如何判断大小端呢大小端什么是大端小端举个例子,比如数字0x12 34 56 78在内存中的表示形式①大端模式:就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。低地址-------------------->高地址0x12 | 0x34 | 0x56 | 0x78②小端模式:就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。低地址-------------------->高地址0x78 | 0x56

2020-12-22 14:22:11 230

转载 大小端

一、大端模式和小端模式的起源        关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令所有的子民吃鸡蛋的时候,必须先打破鸡蛋较小的一端,违令者重罚。然后老百姓对此法令极为反感,...

2020-12-22 13:46:08 633

原创 extern这个关键字

extern"extern"关键字由于C语言编译器和C++编译器生成符号的规则是不同的,C编译器生成函数符号是根据函数名而来,而C++编译器生成符号是根据函数名和参数列表而来的,不过C++编译器也能生成C语言的符号,只要把代码在extern "C"下面就可以了C++调用C的函数时:一定要加上extern “C”,如果不加,链接时编译器找的就是C++的sum符号,根本找不到C语言生成的符号sum,链接就失败了!因此一定要加上,表示告诉编译器这个函数是用C实现的,因此你去找C规则的sum符号吧,这时编

2020-12-20 12:15:59 92 1

原创 0-1背包问题

问题描述:0-1背包问题:T给定n中物品和一背包。物品i的重量是Wi,其价值为Vi,背包的容量为C,问:应该如何选择装入背包的物品,使得装入背包中物品的总价值最大?在选择装入背包的物品时,对每种物品i只有两种选择,即装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i(这里意思是不能将一个物品切开,装入一点)。因此,该问题称为0-1背包问题。问题分析可以考虑用动态规划的思想来分析这个问题,下面先清楚一下什么是动态规划吧~动态规划基本思想:动态规划是针对一类求解最优解的

2020-12-20 11:11:16 267 2

原创 迭代器是什么,还有迭代器失效问题?(浅析)

小编今天刚接触了迭代器,就想和大家分享一下了~~首先让我们来了解一下迭代器它到底是个什么东东呐。。迭代器的由来迭代器无论是序列容器还是关联容器,最常做的操作无非就是遍历容器中存储的元素,而实现此操作,多数情况会选用“迭代器(iteratot)”来实现。那么,迭代器到底是什么呢?我们知道,尽管不同容器的内部结构各异,但它们本质上都是用来存储大量数据的,换句话说,都是一串能存储多个数据的存储单元。因此,诸如数据的排序、查找、求和等需要对数据进行遍历的操作方法应该是类似的。既然类似,完全可以利用泛

2020-12-19 11:02:09 583 2

转载 C/C++中指针和引用的区别?

1.指针有自己的一块空间,指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元,即指针是一个实体。而引用只是一个别名; 2.使用sizeof看一个指针的大小是4,而引用则是被引用对象的大小; 3.指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象 ...

2020-12-18 12:25:14 516

原创 如何在main函数之前和之后执行一段程序

C/C++main函数main函数,又称主函数,是程序执行的起点。每个c/c++代码都有一个main函数,程序启动后,会开启一个主线程执行main函数,在main函数内部我们可以开启很多线程,如果主函数main,return的话,这些在main函数里开启的线程都会结束。(这是大方向上可以这样讲)其实,在程序运行之前,首先运行的代码并不是main的第一行,而是某些特别的代码,这些代码准备好main函数执行所需要的环境,并且负责调用main函数,这时你才可以在main函数里放心大胆的写各种代码:申请内

2020-12-18 11:36:09 2163 1

原创 [动态规划]——打家劫舍

打家劫舍问题描述问题分析代码实现1.问题描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互联通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下,一夜之内能够偷窃到的最高金额。eg:输入:[1,2,3,1]输出:4解释:偷窃1号房屋(金额=1),偷窃上号房屋(金额=3).偷窃到的最高金额=1+3=4.2.问题分析如果没有

2020-12-13 17:01:50 210

原创 [动态规划]——寻找最长公共子序列

寻找最长公共子序列问题描述递归求解非递归求解1.问题描述一个给定序列的子序列是在该序列中删去若干元素后得到的序列。若给定序列X={x1,x2,x3,…,xm},则X的子序列是指存在一个严格递增下标序列;例如:序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}.注意(不一定是连续的)给定两个序列X和Y,当另一序列Z即是X的子序列又是Y的子序列时,称Z是X和Y的公共子序列。2.递归求解void PrintVector(vecto

2020-12-13 16:37:55 359

原创 vector中的resize,reserve,assign的区别

void reserve(size_type n);reserve函数用来给vector预分配存储区的大小,即capacity的值,但是没有给这段内存进行初始化。reserve的参数n推荐预分配内存的大小,实际分配的可能等于或大于这个值。当调用函数时,n的值如果大于capacity的值,就会重新分配内存,使得capacity的值会大于 n。这样,当调用push_back函数使得size超过原来的默认分配的capacity值时避免了内存重分配开销。需要注意的是:reserve函数分配出来的内存空间未..

2020-12-08 23:27:54 1048

原创 树和二叉树

树和二叉树1.二叉树的表示2.二叉树的遍历3.二叉树的基本操作1.二叉树的表示结构设计#define END '#'typedef char ElemType;typedef struct BtNode{ struct BtNode* leftchild; struct BtNode* rightchild; ElemType data;}BtNode,*BinaryTree;2.二叉树遍历所谓书的遍历,就是按某种次序访问树中的结点,要求每个结点访问一次且仅访问一次。v

2020-12-08 22:22:36 62

原创 BST二叉搜索(排序)树

二叉搜索树如果对一棵二叉树搜索树进行中序遍历,可以按从大到小的顺序,将各结点关键码排序起来,所以也称二叉搜索树为二叉排序树。typedef int ElemType;typedef struct BstNode{ BstNode* leftchild; BstNode* parent; BstNode* rightchild; ElemType data;}BtNode;typedef struct{ BstNode* root; int cursize;}BSTree;str

2020-12-08 22:22:10 113

原创 指针的算术运算

指针可以加减数字,但是指针本身不可以进行相加,而可以进行相减。一、加法①.指针+数字(调整权重,指针去掉一个*号)eg:int *p = (int*)100;printf("%d\n",p+4);//100+4*sizeof(int) = 116;printf("%d\n",(char*)+4);//100+4*sizeof(char) = 104;printf("%d\n',(char**)+4);//100+4*sizeof(char*) = 116,去掉一个*是指针,占4个字节pr.

2020-12-08 22:17:39 366 2

原创 栈的实现

栈#include<stdio.h>#include<stdlib.h>#include<string>#include<iostream>using namespace std;template<typename Type>class SeqStack{private: Type *data; size_t maxsize; int pos;//栈顶得一个整形量private: bool IncSize()//增容函

2020-12-08 11:39:47 70

原创 模板

模板注:模板推演不是宏的替换,是类型重命名的规则。#define PINT int *typedef int *SINT;int main(){ PINT x,y;//int * x,y;=>x是整形指针类型,y是整形类型 SINT a,b;//a和b都是整形指针类型}

2020-12-05 23:49:46 63

转载 如何快速转载别人得博客 详解

如何快速转载别人的博客 详解 故渊~ 2019-04-03 15:31:52 70 ...

2020-12-05 14:44:51 105

转载 关系型数据库和非关系型数据库区别?

1、数据存储方式不同。关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的bai,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。2、扩展方式不同。SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。要支持更多并发量,SQL数据库

2020-12-04 23:43:30 677

原创 指针浅析

指针指针:有两个用法,有两个值。一个是指向的值,一个是自身的值、eg:int a = 10, b = 20;int *p = &a;//1const int *p = &a;//2int* const p = &a;//3const int* const p = &a;//4上述代码执行下面语句时,编译是否能通过呢?*p = 100;p = &b;第一行:都可以第二行:不可以 由于const修饰的是指针指向的值,所以*p = 10

2020-12-03 23:50:05 250

原创 static关键字

static在C语言中,static修饰的变量的运行之前就会被加载到对应的.bss区或者.data区(编译期)。因为C+是面向对象的语言,对象只有执行了构造函数才会被生成。所以在c++语言中,static修饰的对象,在运行时才会创建。全局静态变量在全局变量前加上关键字static,...

2020-12-03 19:35:09 440

原创 单链表的逆置

单链表的逆置给定单链表1->2->3->4->5返回被反转后的链表5->4->3->2->1法一:递归实现解题思路:使用递归函数,一直递归到链表的最后一个结点,该结点就是反转后的头结点,记作ret此后,每次函数在返回的过程中,让当前结点的下一个结点的next指针指向当前结点同时让当前结点的next指针指向NULL,从而实现从链表尾部开始的局部反转当递归函数全部出栈后,链表反转完成。//不带头结点的单链表Node* reverseLi

2020-12-02 17:18:30 2277 5

原创 3.类中默认的函数

1.构造函数的定义与使用构造函数是特殊的共有成员函数(1). 函数名与类名相同;(2).构造函数无函数返回类型说明。注意是没有而不是void,即什么也不写,也不可写void!实际上构造函数有返回值,返回的就是构造函数所创建的对象;(3).在程序运行时,当新的对象建立,该对象所属的类的构造函数自动被调用,在该对象生存期中也只调用这一次;(4).构造函数可以重载,严格的讲,说明中可以有多个构造函数,它们由不同的参数表区分,系统在自动调用时按一般函数重载的规则选一个执行;(5).构造函数可以在类中

2020-11-26 10:52:23 107

原创 作用域和生命周期

作用域和生命周期1.作用域(可见性) 作用域(可见性)指标识符能够被使用的范围;只有在作用域内标识符才可以被使用。 此阶段针对编译和链接过程 (1).函数中定义的标识符,包括形参和函数体中定义的局部变量,作用域都在该函数内,也称作函数域。 (2).文件作用域也称全局作用域。定义在所有函数之外的标识符,具有文件作用域,作用域为从定义处到 整个源文件结束。文件中定义的全局变量和函数都具有文件作用域。2.生命周期(生存期) 生命周期指的是标识符从程序开始运行时被创建,具有存储空间,到程序

2020-11-25 11:18:47 1245

原创 2.类和对象

类和对象 类是一种数据类型,设计时系统不为类分配存储空间,所以不能去访问类里面的数据成员,也不能去初始化类里面的数据成员。只能访问这个类所产生的对象的数据成员(前提是共有)。eg:类相当于图纸是描述和规划的蓝图,而对象就是图纸实例化后的实体对象(楼房)。计算机不给类分配内存,只给对象分配内存。创建对象有两种常用方法:1.直接定义 2.动态创建类里面有成员变量(属性)和成员函数,一般都把属性设为私有,成员函数设为公有。成员函数:如果在类里面声明了函数,类外定义时必须要把类名加

2020-11-25 10:37:07 230

原创 1.C和C++的区别

C和C++的区别1.标准输入输出的区别C语言中:标准输入输出流头文件是#include<stdio.h> 标准输入用scanf()函数;标准输出用printf()函数;C++中:标准输入输出流头文件是#include<iostream> 再加上名字空间作用域 using namespace std; 标准输入用cin>> ;标准输出用cout<<; eg: int a; char ch; scanf("%d,%c",&

2020-11-25 00:29:36 132

空空如也

空空如也

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

TA关注的人

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