自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++的菱形继承与虚拟继承

C++的继承中有一种复杂的继承方式,这就是菱形继承。菱形继承(1)什么是菱形继承?假设现在有四个类,分别是A、B、C、D四个类。如果B类和C类同时继承于A类,并且D类又同时继承于B类和C类,那么这四个类之间的关系就叫做菱形继承。可以用下面的图来表示。(2)菱形继承的问题菱形继承会存在两个问题,一个是数据冗余,另外一个是二义性。我用一段简单的代码来说明这两个问题:class A{public:int a;};class B:public A{public:int b;};c

2021-09-13 11:46:22 217 3

原创 协程—非抢占式TCP服务器(一种非抢占式)

协程(Coroutines)是用户态下的非抢占式的轻量级线程,是一种在程序开发中处理多任务的组件项目介绍项目开发环境Linux项目开发语言及工具C、vim、gcc、gdb、Makefile项目特点协程是完全由程序来控制的,是在用户态下执行,这样子就没有用户态到内核态的切换开销协程是非抢占式的调度,用户可以自己实现调度,同一时间只能有一个协程在执行,并且由协程主动交出控制权协程的执行效率非常高。因为子程序切换不是线程切换,而是由程序自身控制,与同等数量的线程相比,协程的执行效率会更高项目适

2021-08-31 22:44:25 294

原创 TCP三次握手和四次挥手通俗理解

一、TCP报文格式在了解三次握手和四次挥手之前,先知道TCP报文内部包含了哪些东西。1 TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。TCP在发送数据前必须在彼此间建立连接,这里连接意思是:双方需要内保存对方信息(例如:IP,Port…)2 报文主要段的意思    序号:表示发送的数据字节流,确保TCP传输有序,对每个字节编号确认序号:发送方期待接收的下一序列号,接收成功后的数据字节序列号加 1。只有ACK=1时才有效。ACK:确认序号的标志,ACK=

2021-04-06 13:34:36 388

原创 C++总结

extern关键字的作用extern置于变量或函数前,用于标示变量或函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。它只要有两个作用:当它与“C”一起连用的时候,如:extern “C” void fun(int a,int b);则告诉编译器在编译fun这个函数时候按着C的规矩去翻译,而不是C++的(这与C++的重载有关,C++语言支持函数重载,C语言不支持函数重载,函数被C++编译器编译后在库中的名字与C语言的不同)当extern不与“C”在一起修饰变量或函数时,如.

2021-03-26 16:14:58 440

原创 miniftp项目总结

一.知道miniftp的项目框架系统逻辑结构服务器有个主进程,用于做控制连接,连接成功后,主进程会创建一组进程组为客户端服务,其中进程组有一个nobody进程和(ftp)服务进程,服务进程会解决客户端的各种请求(上传,下载,删除,重命名,创建目录)二.为什么用进程不用线程所有的线程会共享进程的资源,因为服务进程要为很多客户端服务,我们希望每个客户端独立起来,而不是相互影响,如果非要使用线程会使客户端不能独立,让每个客户端都拥有自己的资源,都有自己的进程资源,有自己的进程空间,操作都是独立的。健壮性,

2021-01-11 17:21:39 409

原创 2020-12-04

Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions)。系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思。面向的是硬件。而库函数调用则面向的是应用开发的,相当于应用程序的api。简明的回答是:函数库调用是语言或应用程序的一部分,而系统调用是操作系统的一部分常见文件系统 系统函数fcntl 文件控制open 打开文件creat 创建新文件close 关闭文件描述字read 读文件write 写文件

2020-12-04 14:43:12 80

原创 优先级队列prority_queue

优先级队列:parent:left child: 2 * parent + 1 right child: 2 * parent + 2child:parent:(child - 1) / 2插入时先尾插list不支持随机访问, 不能作为优先级队列的底层容器优先级队列的默认容器: vector—>随机访问的效率高于双端队列比较规则---->仿函数类仿函数类----> 必须重载 返回值operator()(参数列表)数据的比较-----> 大于:支持 >,小于

2020-11-27 16:09:51 758

原创 list的实现以及list和vector的对比优缺点分析

list的介绍list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。与其他的容器相比较来说,list在任意位置插入,删除的效率是O(1),效率较高list不支持随机访问,不支持operator[ ]的操作结构如下:list的使用基本和vector的接口差不多,少了[ ],下面附上练习时的代码:////void printList

2020-11-23 16:08:10 1390

原创 基础IO

标准库IO接口:fopen; fread; fwrite; fseek; fcloseFILE *fopen(char *filename, char *mode)mode: 文件的打开方式- 只读, 只写, 读写, 追加写“r” -------------只读–若文件不存在就会打开失败“r+”------------读写“w”------------只写–若文件不存在就会创建新文件,若文件已经存在, 清空文件原有内容打开文件“w+”----------读写“a”-------

2020-11-20 15:51:53 160

原创 重学string类的方方面面

string—>字符数组(管理字符的数组)1.熟悉使用2.了解底层原理www.cplusplus.com 可以看到string的方方面面#include <iostream>#include <string>using namespace std;//int main(){// string s1;//无参// string s2("hello");//带参数// string s3(s2);//拷贝构造// string s4(10, 'a');//

2020-11-12 15:56:05 84

原创 泛型编程 <模板>

泛型编程使用模板, 编写跟类型无关的代码例如在一些函数和类的时候,针对不同类型需要写很多重复的代码(swap函数)类:比如我们想实现一个数据结构栈stack,stack的多个对象,st1存int,st2存double,等等。解决方案:1.函数模板templatevoid swap(T& a, T& b){…}2.类模板templateclass stack{private:T* _a;size_t size;size_t capacity;}模板的原理编译

2020-10-30 11:51:01 115

原创 有关static的方方面面(类和对象)

#include <iostream>using namespace std;//class Date{//public:// explicit Date(int year, int month, int day)// :_year(year)// {// cout << "Date (int year)" << endl;// }// Date(const Date& d){// cout << "Date(const D

2020-10-23 10:53:31 76

原创 实现一个简单的minishell

shell是什么?shell是一个程序----打开一个终端运行的程序----命令解释行程序,运行在终端之上,捕捉用户的输入;然后决定要运行哪个shell命令程序流程捕捉键盘输入 scanf/gets获取到键盘输入的数据 — [ ls -l -a ]字符串格式解析 — 以空白字符作为间隔,分割成为一个个的字串, 去掉空白字符char tmp[1024] = " ls -l -a";char *ptr = tmp;char *argv[32] = {NUL

2020-10-21 15:14:41 177

原创 C语言中位运算符的用法

位 运 算今天刷题做了一道关于异或和或的位运算的编程题,自己明确的认识到位运算的不足,再次,重新总结下C语言中关于位运算的概念和理解附上让自己伤心的题链接:https://leetcode-cn.com/problems/single-number-ii/程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。运位算包括位逻辑运算和移位运算,位逻辑运算能够方便地设置或屏蔽内存中某个字节的一位或几位,也可以对两个数按位相加等;移位运算可以对内存中

2020-05-15 14:34:19 936

原创 C++STL—string类的模拟实现

namespace shen{class string{public:typedef char* iterator;//////////////////////////////////////////////////////////////// iteratoriterator begin(){return _str;}iterator end(){return _str + _size;} string(const char* str = ""){ _size = strl

2020-05-13 13:22:27 149

原创 linux下硬链接和软链接的区别

链接:https://www.nowcoder.com/questionTerminal/1b695f9055ed4017a9fe578ef8b02c34?pos=13&orderByHotValue=1来源:牛客网1>首先什么是链接?链接操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称。对于这个新的文件名,我们可以为之指定不同的 访问权限 ,以控制对信息的共享和安全性的问题。 如果链接指向目录,用户就可以利用该链接直接进入被链接的目录而不用打一大堆的路径名。而且,即使我

2020-05-13 11:28:09 170

原创 xshell6 free for home/school 下载地址

https://www.netsarang.com/zh/free-for-home-school/填写自己的邮箱就行了,完了进入邮箱,打开链接开始下载OK了

2020-05-04 11:11:34 3826 1

原创 栈—增删查改的实现

#pragma once// 支持动态增长的栈typedef int STDataType;typedef struct Stack{ STDataType* _a; int _top; // 栈顶 int _capacity; // 容量}Stack;// 初始化栈void StackInit(Stack* ps);// 入栈void StackPush(Stack*...

2019-12-13 12:54:04 276 1

原创 无头单链表—简单功能的实现

单链表的头文件如下:#include "Slist.h"void SlistPrint(SlistNode* plist){ SlistNode* cur = plist; while (cur != NULL){ printf("%d->", cur->data); cur = cur->next; } printf("NULL\n");}SlistN...

2019-12-10 15:21:35 140

原创 几道简单的数组在线OJ题

1.原地移除数组中所有的元素val,要求时间复杂度为O(N),空间复杂度为O(1)。给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。来源:力扣(LeetCode)链接:https...

2019-12-05 13:33:39 209

原创 顺序表—简单功能的实现

顺序表的头文件如下:typedef int SLDataType;typedef struct Seqlist{ SLDataType* a; size_t size; size_t capacity;}Seqlist;//对数据的管理:增删查改void SeqlistPrint(Seqlist* ps);//顺序表的显示void SeqlistInit(Seqlist* ps...

2019-12-02 22:29:57 141

原创 【数据结构】几道简单的时间算法题

分析以下程序的时间复杂度( )for(int i=0;i<n;i++)for(int j=0;j<n;j++)a[i][j]=i*j;A、O(n)B、O(n^2)C、O(nlogn)D、O(logn)a[i][j]=ij;这个语句执行了nn次,所以选B分析以下函数的时间复杂度( )void fun(int n) {int i=l;while(i&...

2019-11-30 00:17:03 856

原创 C语言—简单的通讯录实现

主函数列个枚举变量,简单的swich语句实现选择要使用的功能,代码如下:#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include "contact.h"#include <stdlib.h>enum OPTION{ EXCIT, ADD, DEL, SEA, MOD, SHOW, SORT...

2019-11-18 00:10:53 1815

原创 【C】指针进阶——指针数组和数组指针

指针数组和数组指针int* arr1[10];char *arr2[4];char **arr3[5];看看上面三个代码,第一个定义的是整形指针的数组,第二个是一级字符指针的数组,第三个是二级字符指针的数组。int (*p2)[10];这行代码表示的含义是定义了一个数组指针。不难看出,判断是指针数组还是数组指针不妨从控制符的优先级判断,int(*p2)[10],可以看出(*p2)和...

2019-11-15 14:09:03 137

原创 字符串函数的简单实现

//1.实现strcpy//2.实现strcat//3.实现strstr//4.实现strchr//5.实现strcmp//6.实现memcpy//7.实现memmove#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h&gt...

2019-11-13 18:55:51 85

原创 通过逆转实现旋转字符串

//1.实现一个函数,可以左旋字符串中的k个字符。//ABCD左旋一个字符得到BCDA//ABCD左旋两个字符得到CDAB////#include <stdio.h>//#include <stdlib.h>//#include <string.h>////ABCD先把ABC逆转,再把D逆转,再整体逆转//void reverse(char* l...

2019-11-12 17:22:49 98

原创 简单算法题-输入一个整数数组,实现一个函数, 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分, 所有偶数位于数组的后半部分

//1.调整数组使奇数全部都位于偶数前面。//题目://输入一个整数数组,实现一个函数,//来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,////所有偶数位于数组的后半部分。//#include <stdio.h>//#include <stdlib.h>//void swap(int* left ,int len){// int* rig...

2019-11-05 16:44:56 585 1

原创 C小结【指针】

指针的含义在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。举个例子:可以形象的想象当你酒店住宿时,每个房子相当于内存,对应的的房间都有不同的门牌号,假设有个人登记了一间房间,门牌号是Px,通过门牌号可以找到房...

2019-10-24 15:21:50 142

原创 C小结【操作符】

操作符操作符分类可以分为:算术操作符,移位操作符,位操作符,赋值操作符,单目操作符,关系操作符,逻辑操作符,条件操作符算术操作符分为+ - / * %#include <stdio.h>#include <stdlib.h>int main(){ int a = 1; int b = 2; int sum1 = a + b; int sum2 ...

2019-10-22 17:07:04 113 2

原创 1. 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果 A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二; D选手说:C最后,我第三; E选手说:我

//1.//5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果//A选手说:B第二,我第三;//B选手说:我第二,E第四;//C选手说:我第一,D第二;//D选手说:C最后,我第三;//E选手说:我第四,A第一;//比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。////#include <stdio.h>//#include <stdlib.h...

2019-10-21 21:35:49 441 2

原创 用c语言编写一个简单的五子棋

编写前先简单梳理思路,写下流程,流程如下:1.创建棋盘并初始化,空棋盘,全是空格2.打印棋盘3.要求玩家落子,让用户输入坐标(玩家落子’1’)4.判定游戏胜负5.电脑落子(‘2’)6.判定游戏胜负然后2-6进行循环,直到分出胜负或平局 判断胜负:横着竖着斜着连成5个源码如下:#define _CRT_SECURE_NO_WARNINGS#include <stdio.h...

2019-10-19 16:14:53 1406

原创 递归和非递归分别实现求第n个斐波那契数

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368从第三项开始,它就是后面每个数的值是前两个数的和思路:如果设F(n)为该数列的第n项(n∈N*),那么这句话可以写成如下形式::F(n)=F(n-1)+F...

2019-10-10 10:56:08 255

原创 使用函数实现两个数的交换

第一种方法:#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>//直接在具体函数中打印出,不存在形参实参的转换void swap(int x, int y){ int temp = 0; temp = x; x = y; y = temp; printf("x=%d\n...

2019-10-09 15:23:08 995

原创 编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误, 可以重新输入,最多输入三次。三次均错,则提示退出程序

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ int i = 0; //循环三次,用户只能登陆三次密码 for (; i < 3;i++) { //创建数组用于保存用户输入的密码 ...

2019-10-08 16:18:21 422

原创 写代码可以在整型有序数组中查找想要的数字, 找到了返回下标,找不到返回-1.(折半查找)

#include <stdio.h>#include <stdlib.h>int binarysearch(int arr[], int size, int toFind){ int left = 0; int right = size - 1; while (left<=right){ int mid = (left + right) / 2; i...

2019-10-08 15:39:23 194

原创 运用时间函数猜数字的小游戏

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <time.h>int Menu(){ printf("===============\n"); printf("1.开始游戏\n"); printf("2.结束游戏\n"); printf("...

2019-10-02 17:19:30 308

原创 求出0~999之间的所有“水仙花数”并输出

#include <stdio.h>#include <stdlib.h>#include <math.h>//水仙花“水仙花数”是指一个三位数//其各位数字的立方和确好等于该数本身,如;153=1+5+3?,则153是一个“水仙花数”//设置x,y,z分别为百位十位个位,运用pow函数;int main(){ int x, y, z; for ...

2019-10-01 17:39:02 120

原创 安装git及git的使用方式

1.安装git百度git进入git官网https://git-scm.com/,点击download选择自己电脑的系统(以Windows为例)下载下来进行安装git:一路点next就好,完成安装;2.安装TortoiseGit最好再下载个TortoiseGit图形化工具,用起来更加方便(附下载地址)https://pan.baidu.com/s/1jKo3P7xMSPD5mDX3...

2019-09-30 11:24:17 257 1

原创 编写程序数一下 1到 100 的所有整数中出现多少次数字9

打眼一看很简单,感觉用个循环从1到100记录含有9的次数就好了,但是苦于具体的数学原理还是不明白,还是看了下别人的原理。。。具体如下:100之间含有9的数字无非两种,一种就是十位有9(例如90~99),另一种就是个位有9(例9,19…)个位有9可以让他进行与10取余数,十位有9可以让他与10相除,若结果为9就记录一次,累加。有个特殊的99,要记录两次,这种方法试用代码如下:# defin...

2019-09-24 15:00:56 349

原创 不允许创建临时变量,交换两个数的内容

# define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>int main(){ int i = 0; int j = 0; printf("请输入i j的*斜体样式*值:"); scanf("%d %d", &i, &j); i = i + j;//把i+j的值...

2019-09-24 12:21:45 76

空空如也

空空如也

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

TA关注的人

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