自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 静态联编和纯虚函数

静态联编是指程序在编译时做的工作 ,对于调用对象的函数来说,要确定函数的默认值,类型,可访问性。这里的op是obj 类型, 所以编译时会绑定obj的printf,因为printf 是公有函数 ,所以编译可以通过,而且默认值确定的是10。但在运行时进行查虚表 运行的是base里面的虚函数 ,所以这里最后执行的是base里的虚函数 ,给的默认值是10。对于op来说 调动add fun都可以 ,但调动fun带参是不行的 ,因为op是obj类型,所以在编译时会在obj里面找对应函数,但obj

2022-04-13 20:39:57 259

原创 分治策略-快速排序

分治策略是将规模较大的问题分解成规模小的问题,问题不变,规模变小。导致了递归过程的产生。分治策略能解决问题的特征:1 该问题的规模缩小到一定程度可以很容易解决2 该问题可以分解为若干个规模较小的相同问题3 使用小的规模解 ,可以合并为原规模的解4 该问题分解的各个子规模是相互独立的。以下两个例子第一个是查找数组中的元素并返回下标int Find(const int* br, int n, int val){ if (n <= 0 || br[n - 1] ==..

2022-04-13 20:31:23 960

原创 多态和虚函数

多态多态分为编译时的多态和运行时的多态编译时的多态在编译时 ,就确定了和哪个max函数进行绑定。运行时的多态是指在程序执行前无法根据函数名和参数来确定调动哪一个函数,必须在程序执行过程中动态的确立,是通过类继承关系和虚函数来实现的。必须要以指针或者引用来调用虚函数才能达到运行时的多态。虚函数virtual 返回类型 函数名只有类的成员函数才能被定义为虚函数。当类的成员函数被定义为虚函数时 ,在所有派生类中都保持虚的特性。注意事项:1派生类中定义虚函数必须和

2022-04-11 20:19:32 394

原创 c++继承

继承如果派生类是class ,默认情况下继承都是私有。如果是struct ,默认继承方式是共有的。base继承了obj , 在构造base时先分配总大小16个字节的空间 ,然后先构建隐藏父对象obj 在构建base。而不是把obj里面的成员继承过去。如果继承方式是公有继承 ,那派生类可以访问基类的公有和保护属性 ,但不能访问私有属性。如果是私有方式继承,也可以访问公有和保护属性,但不能访问私有属性。如果是在类中直接创建一个有名对象 ,那无论这个有名对象是私有还是公有 ,只

2022-04-11 20:18:05 453

原创 vector

vector构造方式有多种,可以用列表构造 ,移动构造 ,对象构造等size 是vector里的元素个数 ,cap是vector里的空间大小, vector里还有迭代器,常性迭代器等reserve ()函数是预留空间 ,如果给的空间比cap小 ,那就什么都不做 ,如果给的空间比cap大,看在原本空间后面能否直接开辟空间如果空间不够,就另开一块空间 ,把本空间的对象拷贝过去然后析构掉。需要注意的是如果用了reserve 那以前对对象的引用和迭代器都会失效 因为这里的空...

2022-03-14 23:23:02 154

原创 c++创建双循环链表(附加迭代器)

namespace yhp{template<class _Ty>class list {protected: struct _Node; typedef struct _Node* _Nodeptr; struct _Node //创建一个结点 { _Nodeptr _Prev, _Next; _Ty _Value; }; struct _Acc; struct _Acc { typedef struct _.

2022-03-03 23:31:03 772

原创 模板函数 模板类

这里fun就是模板函数 ,每次调用fun函数时 ,就会生成一个fun 函数 ,t就是传的参数 。 所以这里的fun只是模板会根据传参不同生成不同的fun函数示例如下如果模板是T*类型的这里fun明确要一个指针 ,不能推演整形。这里就形成了部分特指模板为引用时这里是推演不了的 ,因为x y地址是个常量 ,不能改变 ,所以t要推演成常性的指针 ,但系统推演不了这种模板。模板函数的重载类模板这里和类函...

2022-02-28 23:34:24 199

原创 静态成员和单立模式

静态成员用static修饰的成员特点:只能在类外初始化 ,不能在类内拷贝或者构造函数中初始化在类内声明的静态成员是所有对象共享的sizeof 类不算静态成员的大小静态成员属于类 ,不属于某个对象 ,所以在成员函数中前面没有this指针 ,const限制不到。静态函数没有this指针 ,所以不能在里面访问某个对象,只能访问静态成员。单立模式单立模式类似于电脑上的回收站 ,只能打开一个使用。这里将构造和拷贝构造函数都设置成私有 ,只能在共有函数中返回静

2022-02-27 22:16:09 219

原创 友元函数

特点1 友元不具有自反性2 友元不具有传递性3 友元不具有继承性外部函数友元一般的函数无法访问类中的私有属性,但我们可以在类中声明外部友元函数,这样在外部函数中可以访问类里面的私有和保护属性成员函数友元在一个类中调用另一个类的私有属性等 ,如在base函数中调用obj中的私有属性。先要声明obj ,在设计obj时 把base的成员函数设计成友元。这样就可以在base中调用obj的私有保护等属性。类友元在base里把obj声明成obj的友元...

2022-02-27 22:08:03 329

原创 【c++】类和对象 1

class Person{public: char* _name; int _sex; int _age; void init(char* name, int age, int sex) { _sex = sex; _age = age; _name = new char[strlen(name) + 1]; for (int i = 0; i < strlen(name) + 1; i++) { _name[i] = name[i]; } .

2021-12-12 14:18:36 627

原创 c和c++的区别

函数的区别常用函数区别输入输出cout << a << endl 输出函数cin >> c 输出函数申请空间和释放malloc 用 new代替free 用 delete 代替int *q = new int(10);// 申请一个空间 ,()里面是要给空间放的值,如果单独一个()就放默认值 delete q; int *q1 = new int[10]; //申请一个数组 delete[]q1; //删除数组 要在前面加[

2021-12-04 21:15:11 511 1

原创 【数据结构】八大排序——堆排序,快速排序

堆排序:时间复杂度O(nlogn) 空间复杂度O(1) 稳定性:不稳定堆排序用的是树形结构 ,把数组写成二叉树接下来的思想类似于冒泡 ,把数组调成大顶堆,就是大的数在上,小的在下,顶端就是最大的树,因为要确保把最大的数调到顶端 ,所以第一次从最小的结点开始依次往上调调好之后 ,将顶端的数和最后一个数交换位置 ,并剔除最后一个数 。这样保证我们得到最大的数,并放在末尾,然后在调整一次 ,因为我们已经初始调整过大顶堆,所以此时只有第一个数不稳定 ,从上往下调整...

2021-11-17 22:02:44 600 1

原创 【数据结构】八大排序——归并排序,基数排序

归并排序:归并排序是开始将待排序列的每一个数看成一组,进行一 一合并,然后进行二二,四四等合并。呈2的倍数递增,到2的倍数大于待排序列时停止。比如 一组待排序列 5 6 7 2 15 4 14 9 3 10第一次进行一 一合并 ,把每一个数看成一组稳定序列 , 合并完 5 6 2 7 4 15 9 14 3 10然后进行二二合并 , 2 5 6 7 4 9 14 15 3 10然后进行四四 2 4 5 6 ...

2021-11-14 17:26:50 1178

原创 【Linux】库文件的生成与使用

什么是库文件库是一组预先编译好的方法的集合。Linux系统存储的库的位置一般在:/lib 和 /usr/lib。 在 64 位的系统上有些库也可能被存储在/usr/lib64 下。库的头文件一般会被存储在 /usr/include 下或其子目录下。库有两种,一种是静态库,其命令规则为 libxxx.a,一种是共享库,其命令规则为 libxxx.so,静态库如何写一个静态库先写好函数 , 在头文件中放入声明 ,对函数文件进行编译成.o文件 用ar创建库使用 ar 命令将第一步编译的

2021-11-14 09:20:32 249

原创 Linux上c程序的编译和调试(gcc make gdb)

首先需要在Linux上安装gcc , sudo su切换到管理员模式 ,apt install gcc 安装gcc前面有说过vim的安装和使用 ,在我们用vim写好一个程序后 ,就可以用gcc进行编译1 gcc分步编译链接(1) 预编译 : gcc -E main.c -o main.i(2) 编译: gcc -S main.i -o main.s(3) 汇编: gcc -c main.s -o main.o(4) 链接: gcc main.o -o main通常直接一...

2021-11-01 12:14:54 1045 1

原创 Linux上的进程管理命令

进程管理命令进程:一个正在执行的程序pcd :进程控制块 ,结构体是 struct task _struct ; pid 唯一标识一个进程ps默认显示与当前终端有关的进程信息 -e 显示系统中所有的进程信息 -f 显示更多的进程属性信息(全格式) -L 显示进程中的线程 IDkillkill + 进程id号,结束一个进程 , kill是发射一个结束的信号 ,有时没被响应 ,比如ctrl z 暂停的进程 , 用 kill -9 强制结束ctrl c 结束一个前台运行的程序pki

2021-10-31 11:10:08 174

原创 VS2019中正确使用scanf

在vs2019中对scanf 做了优化 , 因为如果给scanf输入数组 ,可能存在越界问题 冲掉后面的值 ,所以在vs2019中要 使用scanf_s , 如果想继续使用scanf的话 ,就需要给前面加宏 #define _CRT_SECURE_NO_WARNINGS而在scanf_s中输入字符串需要加上参数 如scanf_s("%s",arr,10)scanf_s("%s %s",arr,10,brr,10)每输入一个字符串,就需要在后面加上输入范围 。输入可以小于...

2021-10-28 22:52:53 2760

原创 【数据结构】字符串匹配(BF KMP)算法

在开始前需要了解子串和真子串的区别abc 的 子串有 a ,b,c,ab,bc,ac,abc , 而真子串是不包括自身的其他子串BF算法目的 : 在主串中 ,找到子串开始的位置如 主串 aaaabaa 子串 ab 就应该返回下标3BF算法的思想是 :1让主串和子串一一比较 ,主串下标记作i 子串下标记作j 让i++ j++2 如果j 走出了范围就说明 找到了子串 , 返回 i -j (因为要返回起始位置 ,主串走过的长度就是i)3...

2021-10-28 10:27:24 873

原创 vi中操作命令和文件压缩与解压命令

文件编译命令 vi三种模式切换命令模式 插入模式 (编译模式) 末行模式命令模式切换到插入模式: a //进入到当前光标后开始编辑 A //进入到当前光标所在行的行末开始编辑 i //进入当前光标位置开始编辑 I //进入当前光标所在行的行头开始编辑 o //进入当前光标下一行开始编辑 O //进入当前光标上一行开始编辑 命令模式切换到末行模式 : //对文本的设置或保存工作 / //对文本进行全文向下搜索字符串

2021-10-24 20:56:59 709 3

原创 linux中一些基本命令和对文件操作方法

cd切换路径 cd +文件名 , cd ~ 回到家目录 ,cd .. 返回上一层pwd显示当前所处位置ls显示当前目录下有哪些文件 ls -l显示详细信息 ls -a 显示隐藏文件touchtouch +文件名 创建普通文件mkdirmkdir +文件名 创建文件夹ctrl+c 屏蔽这一行cp拷贝 cp a.c b.c 把a.c拷贝到b.c , 拷贝文件夹要加一个参数 cp -r tmp tmp1 把tmp拷贝到tmp1 ,cp a.c tmp/ f.c 代表

2021-10-24 20:54:22 1906

原创 Linux目录结构

linux是多用户登陆stu代表普通用户,root代表着管理员用户。下来是虚拟机名字,因为linux可以多用户使用 ,也可以夸机使用,所以要知道你用的是哪台虚拟机。linux的目录结构是一颗倒状的树最上面的斜杠是根目录,根目录下都是文件夹 ,文件夹下都是子文件。cd / 走到根目录下 在用 ls打开根目录清屏 clear加回车bin里面放的是执行的命令 如 ls =main.exe 也可以叫二级制可执行程序boot存放的系统的内核...

2021-10-08 00:35:04 161

原创 栈——顺序栈

栈:限定在表尾进行插入和删除的线性表(受到限制的线性表),是一种先进后出,后进先出的数据结构1 顺序栈:和链表中的顺序表类似,不过栈是在尾部进行操作,少了头部和中间的几个函数,这里我直接实现一下代码。stack.htypedef int ELEM_TYPE#define INIT_SIZE 10sturct Stack{ ELEM_TYPE *base; //接受malloc从堆内存申请的连续存储单元 int top; //保存有效数据长度 int

2021-10-05 20:49:14 189

原创 数据结构单链表面试题

1 单链表如何逆置逆置1 :一直头插即可bool Reverse(PNode plist){ assert(plist!=NULL); Node *p=plist->next; Node*q; plist->next=nullptr; //让头结点断开,方便尾部为空。 while(p!=NULL) { q=p->next; p->next=plst->next; plist->next=p; p=q; } ..

2021-09-29 21:49:35 246

原创 结构体和联合体

结构体定义用struct ,结构体里的变量为结构体的属性,结构体也是一种类型,是我们自己定义的类型。struct days { int year ; int month ; int day ; };比如在这里定义一个日期的结构体,struct +结构体名称 后面大括号里面写结构体成员 , 别忘了最后要带上 " ; " , 结构体是和基本类型一样的类型,也可以用来定义变量。如struct da...

2021-08-25 00:49:51 163

原创 扫雷的实现

首先在写扫雷前我们需要理清逻辑,整个程序运行都需要哪些步骤。1 我们需要准备一块初始化的棋盘 这里我写的是9*9的扫雷,所以需要准备11*11的棋盘,因为在计算周边雷个数时 四个角和四条边是特殊的,所以我在这里扩大棋盘,,让它的规律都一样。2 有了棋盘后需要埋雷。3准备好棋盘后,我们在呈现给用户时需要把棋盘遮住。4 前面是在游戏开始前需要准备的工作,在游戏开始后 ,用户输入坐标,首先要判断它是不是雷。如果不是雷,计算周边雷的个数。5 最后我们需要写出用户成功的判断条件。接下来开...

2021-08-02 10:54:22 615 1

原创 数组,指针

数组一组相同元素的集合,定义数组时,必须有元素数量,和元素类型。如 int arr[5]={1,2,3,4,5}, 数组所占字节为数组数量*类型字节。字符串数组默认以 /0 结尾,如 charar[5] ={"a,b,c,d"} ar中有五个元素,最后有个/0.定义数组时,必须要给定数组元素数量和类型,如 int ar [5]={} , 数组中元素会默认为0,或者int ar[]={1,2,3,4,5} ,在预编译时会自动默认数组元素为5个。访问数组时是以下标来访问,数组的...

2021-07-21 17:30:25 134

原创 C语言概述(5)

static :静态关键字如果用在局部变量时,此变量会被初始化,初始化只进行一次void fun(int x){ int a = x; int b = 0; a++; b++; printf("a=%d b=%d\n", a, b);}int main(){ int i; for (i = 10; i > 0; i--) { fun(i); } return 0;}这个程序中打印...

2021-07-21 16:51:53 133

原创 c语言概述(4)

辗转相除法int main(){ int a = 0, b = 0; scanf_s("%d%d", &a ,& b); while (b != 0) { int c = a % b; a = b; b = c; } printf("%d", a); return 0;输出地址的方式printf("0x%08x", &a) 或 printf("%p"...

2021-07-15 13:35:47 138

原创 C语言概述(3)

函数函数由返回类型+函数名称(形参列表)构成,如果()后加‘;’,为函数的声明。()后为{}是函数的定义。定义形参时,每一个变量前都要有类型。函数的功能尽可能单一进程 :可执行文件执行的过程空间资源:内存 时间资源:cpu.date数据区 全局变量的存放区域 .stack栈区 局部变量的存放区域作用域(可见性)指标识符能够被使用的范围,只有在作用域内才可以被使用。(此阶段只针对编译和链接的过程)程序编译链接是由上到下,所以定义函数和全局变量...

2021-07-13 17:55:50 122

原创 c语言概述(2)

常量1 字面常量 :带有类型2 宏定义常量:#define定义的常量,没有类型,没有存储空间,是一种替换原则,如#define PI 3.14 即将PI换成3.14即可,宏后面不用写‘;’,否则替换时也会带‘;’。3 用 const修饰的变量,称为常变量:可读取不可改写4 枚举常量enum:枚举类型是一种受到限制的整形量,枚举变量只能在枚举中的值取,不给枚举值时,起始的第一个枚举值为0,后面依次加一。5 字符、字符串常量:单引号是字符的定界符,双引号是字符串的定界符。char...

2021-07-12 19:34:18 131

原创 C语言概述(1)

c语言是一种强类型语言c语言编译链接过程:.c—预编译—.i—编译—.obj—链接—.exe(可执行文件)进制转换 二进制:逢二进一 八进制:逢八进一 十六进制:逢十六进一转十进制: 二进制:010101 = 1*2^0+0*2^1+1*2^2+0*2^3+1*2^4+0*2^5=21 八进制 :25 = 5*8^0+2*8^1=21 十六进制:15 = 5*1...

2021-06-25 21:58:16 4229

空空如也

空空如也

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

TA关注的人

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