- 博客(33)
- 收藏
- 关注
原创 共享目录服务器
共享目录服务器: 编写一个服务器,能够实现用户上传文件,并且通过浏览器浏览以及下载这些文件为什么?百度云盘下载和上传速度太慢,不能满足用户的需求每次使用u盘拷贝文件太麻烦了框架设计** 流程设计**搭建一个TCP服务器,接收客户端连接请求,建立连接基于多路转接模型进行总事件监控,若有时间到来,则将描述符抛入线程池中线程池中的线程操作-a. http协议格式请求数据解析 http协议请
2020-08-08 10:03:07
287
原创 c++智能指针,从初学到入门
1.为什么需要智能指针下面我们先分析一下下面这段程序有没有什么问题?#include <vector>void _MergeSort(int* a, int left, int right, int* tmp){ if (left >= right) return; int mid = left + ((right - left) >> 1); // [left, mid] // [mid+1, right]
2020-07-28 15:40:04
172
原创 实现一个简单的list类
list------序列式容器-----可前后双向迭代list可以在常数范围内任意位置进行插入和删除底层:带头节点的双向循环链表双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向访问list不支持任意位置的随机访问,访问效率O(n)比如 :要访问第n个元素,需要从已知位置(头部或尾部)进行迭代list构造函数:list() 构造空的listlist (size_type n, const value_type& val = value_type()) 构造的lis
2020-07-16 09:32:58
242
原创 实现一个简单的vector类
vector ---- 序列容器-----可变大小数组存储:连续存储空间来存储元素vector是使用动态分配数组来存储它的元素。就时间而言,相对较高因此,vector占用了更多的存储空间,并且以一种有效的方式动态增长访问:采用下标进行访问,与数组访问一样高效与其他动态序列容器相比,vector访问元素,在末尾添加和删除元素更加高效大小:vector会分配一些额外的空间,防止一些可能的增长他的大小会被容器自动处理并不是每一次元素加入到容器时,都会重新分配大小vector构造函数:vecto
2020-07-15 09:10:17
527
原创 插入排序---直接插入排序
基本思想将一个记录插入到已排序好的有序表中,从而得到一个新记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。要点:设立哨兵,作为临时存储和判断数组边界之用。示例:如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以...
2020-04-01 00:27:41
148
原创 C++中vector和list的区别以及应用
1.概念(1)vector:连续存储的容器,动态数组,在堆上分配空间底层实现:数组两倍容量增加:vector增加(插入)新元素时,如果未超过当时的容量,则还有剩余空间,那么直接添加到最后(插入指定位置),然后调整迭代器。如果没有剩余空间了,则会重新分配原有元素个数的两倍空间,然后将原油空间元素通过复制的方式初始化给新空间,再向新空间增加元素,最后析构释放原有空间,之前的迭代器会失效。性能...
2019-11-25 21:44:19
343
原创 C++四种cast转换
C++中四种类型分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast1.const_cast用于将const变量转换为非const2.static_cast用于各种隐式转换,比如非const转const,void*转指针等,也可以用于多态向上转换,如果向下转能成功但是不安全,结果未知3.dynamic_cast用于...
2019-11-19 21:33:20
96
原创 简述HTTP和HTTPS的区别
HTTP协议与HTTPS协议的区别如下:HTTP协议是以铭文的方式在网络中传输数据,而HTTPS协议传输的数据则是经过TLS加密后的,HTTPS具有更高的安全性HTTPS在TCP三次握手阶段之后,还需要进行SSL的handshake,协议加密使用的对称加密密钥HTTPS协议需要向服务端申请证书,浏览器端安装对应的根证书HTTP协议端口是80,HTTPS协议端口是443HTTPS优点...
2019-11-13 14:17:11
422
原创 Linux----如何保证TCP的可靠性
1.序列号,确认应答,超时重传 数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会说明它下一次需要接收的数据序列号。如果发送方迟迟没有收到确认应答,则可能是发送的数据丢失,也有可能是确认应答丢失,这时发送方在等待一定时间后会进行重传。这个时间一般是2*RTT(报文段往返时间)+ 一个偏差值。2.窗口控制与高速重发控制/快速重传(重复确认)...
2019-11-05 19:57:38
518
原创 Linux下线程的创建
POSIX线程库:与线程有关的函数构成一个完整的系列,大多数函数的名字以“pthread_”开头,而要使用这些函数需要引入头文件<pthread.h>,在编译时需追加-lpthread链接函数库#线程创建://功能:创建一个线程//函数原型:int pthread_creat(pthread_t *thread, const pthread_attr_t *attr,...
2019-10-31 21:53:08
125
原创 linux下线程基础
什么是线程?在一个程序里的执行线路(一个进程内部的控制序列) 一切进程序列至少都有一个线程 在进程内部运行(在进程地址空间进行) 是一个轻量级进程 在进程虚拟地址空间,可以看到进程的大部分的资源,将进程资源分配给每个执行流,就形成了线程执行流 线程是cpu调度的基本单位线程优点:创建一个线程的代价比创建一个进程的代价小 与进程之间的切换相比,线程之间的切换需要操作系统做的工作...
2019-10-24 20:39:21
85
原创 static和const关键字的作用
const classA operator*(const classA& a2);operator*的返回结果必须是一个const对象。如果不是,这样的变态代码也不会编译出错: class A a,b,c;(a*b) = c; //对a*b的结果赋值操作(a*b)=c显然不符合编程者的初衷,也没有任何意义
2019-09-17 22:58:47
142
原创 Linux_网络基础(1)
网络的发展背景:网络发展: 局域网/城域网/广域网:通过网络覆盖范围进行划分 局域网LAN:计算机数量更多了,通过交换机和路由器连到一起 广域网WAN:将远隔千里的计算机连在一起 局域网与广域网只是相对而言 互联网,因特网:上网...
2019-09-11 18:43:30
109
原创 c++__拷贝构造函数
定义拷贝构造函数又被叫做复制构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。背景在C++中,下面三种对象需要调用拷贝构造函数(有时也称“复制构造函数”):一个对象作为函数参数,以值传递的方式传入函数体; 一个对象作为函数返回值,以值传递的方式从函数返回; 一个对象用于给另外一个对象进行初始化(常称为赋值初始化);如果在前两种情...
2019-09-11 18:10:49
112
原创 c++_析构函数
1.定义 与构造函数功能相反,析构函数不是完成对象的销毁,局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成类的一些清理工作。2.特性析构函数是特殊的成员函数特征:析构函数名是在类名前加上~ 无参数返回值 一个类有且只有一个析构函数。若未显示定义,系统自动生成默认析构函数 对象生命周期结束时,c++编译系统系统自动调用析构函数 #incl...
2019-09-10 17:04:59
241
原创 c++ 构造函数
构造函数是c++类中六个默认成员函数中的一个,主要负责完成初始化工作1.概念:构造函数是C++类中一个特殊的成员函数,名字与类名相同,创建类类型对象时编译器自动调用,保证每个数据成员都有一个初始值,并且在对象的生命周期内只调用一次????2.特性:函数名与类名相同无返回值对象实例化时编译器自动调用对应的构造函数构造函数可以重载构造函数分为无参构造和带参构造函数(构造函数的重载)通过...
2019-09-05 10:25:51
163
原创 c++ 类和对象
1.认识类#c语言是面向过程的,关注的是过程,分析出求解问题的步骤,用函数逐步解决问题#c++是基于面向对象的,关注的对象,将一件事情拆分成不同对象,通过对象之间的交互完成2.引入类2.1从结构体到类结构体是c语言的一种自定义的数据类型,它把相关联的数据元素连在一起struct Student{ void SetStudentInfo(const char* name, ...
2019-09-03 16:59:23
792
原创 函数重载,函数重写(覆盖),函数重定义(隐藏)
1.函数重载:C++中函数的一种特殊情况,在同一个作用域下,函数名相同,形参列表(参数个数,类型,顺序)不同的函数//重载函数int add(int left,short right){ return left + right;}//参数类型不同int add(short left,short right){ return left + right;}//参数顺序不...
2019-09-02 15:37:59
179
原创 Linux 常用工具
Linux常用工具1.yum软件包管理器2.vim文本编辑器3.gcc编译器4.makefile5.gdb调试器6.git1.yum软件包管理器yum list 查看可以安装的软件包yum instal 安装软件包yum remove 移除软件包2.vim编辑器对文本的操作:插入数据 保存 删除 复制 粘贴 剪切 滚动显示位置/显示位置vim为了能...
2019-03-28 19:20:06
139
原创 Linux–––操作系统&基本操作
Linux操作系统:外部应用+系统内核 操作系统–––>软件–––>让计算机更好用–––>合理的统筹管理计算机上的软硬件资源基础指令:分别包含目录相关指令,文件相关指令,时间命令,查找命令,其他命令,使用规则:命令名[操作选项][源操作对象][目标操作对象]目录相关命令 目录—-文件夹 Linux一切皆文件——实现接口的统一 Linux是一个多用户操作系统 ...
2019-03-28 19:08:53
522
原创 初识C++––––缺省参数
备胎?缺省参数就是C++中函数参数的备胎1.缺省参数的概念缺省参数是声明和定义一个函数时为函数的参数指定一个默认值,在调用该函数时,如果没有指定实参时,则采用该默认值,否则使用指定的实参#include<iostream>using namspace std;void TestFunc(int a = 0){ cout<<a<<endl;...
2019-03-26 16:45:52
259
原创 c 翻转返回值
1.编写函数:unsigned int reverse_bit(unsigned int value);这个函数的返回值value的二进制位模式从左到右翻转后的值。如:在32位机器上25这个值包含下列各位:00000000000000000000000000011001翻转后:(2550136832)10011000000000000000000000000000程序结果返回:2...
2019-03-15 19:01:37
142
原创 初识C++ ––––命名空间
首先定义一个命名空间,定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空 间的成员。namespace N{//N 为命名空间的名字 int a; int b; void fun(){};//命名空间也可以定义函数}命名空间可以嵌套使用,如下:namespace N{ int a; ...
2019-03-15 19:00:08
210
原创 数据结构---顺序表
顺序表是在计算机中以数组的形式保存的线性表,采用顺序存储结构的线性表通常称为顺序表#include<stdio.h>//构造一个顺序表结构体typedef struct SeqList{ int array[100]; int size;} SeqList;头插 时间复杂度O(n)在表头插入元素value,需要将表中的元素依次向后移动一位,然后...
2019-03-07 21:24:11
197
原创 c编程练习
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。#include<stdio.h>#include<stdlib.h>//5位运动员参加了10米台跳水比赛...
2018-11-27 17:20:55
163
原创 扫雷初阶版
#include<stdio.h>#include<stdlib.h>#define ROW 11#define COL 11#define COUNT 10//扫雷//1.初始化地图(main_map,show_map),布置雷阵//2.先打印show_map。//3.提示用户进行输入坐标[1,ROW][1,COL]//4.对用户输入进行合法性判定,如...
2018-10-29 15:36:36
145
原创 日常练习
1.递归和非递归分别实现求第n个斐波那契数。#include <stdio.h>#include <string.h>#include <stdlib.h>//利用递归实现佩波那契数列//1 1 2 3 5 8...//n=(n-1)+(n+1)#define N 20//修改宏定义来修改数列的项数int Fibonacci(int n){...
2018-10-25 16:25:58
251
原创 日常练习
1.完成猜数字游戏。//完成猜字谜游戏#include<stdio.h>#include<stdlib.h>#include<time.h>void Menu() { //打印菜单 printf("*****************************\n"); printf("***** 欢迎进入三子棋界面 *****\n")...
2018-10-22 17:31:22
232
原创 三子棋
//打印三子棋游戏// 规则:胜负//。 横行 竖行 或者 对角线连在一起有三个一样的图案// 率先完成的即为胜方// 和棋// 图案内没有空格时且没有有连到一起的图案// 1.首先打印一个棋盘//| | | |//|---|---|---|//| | | |//|---|---|-...
2018-10-22 16:06:04
232
原创 日常练习
1.在屏幕上打印菱形。// *// ***// *****// *******// *********//***********// *********// *******// *****// ***// *//规律://1.第一行5个空格,1个*号//2.第二行4个空格,3个*号//3.第三行3个空格,5个*号//........
2018-10-15 16:10:27
133
原创 c 编程练习
将数组A中的内容和数组B中的内容进行交换。(数组一样大)//1,定义俩个数组//2.需要一个数组,用以承接其中一个数组中的元素//3.将一个数组中的元素交换到变量数组中//4.通过for循环来实现数组之间的交换int main(int argc, const char * argv[]) { int arr1[] = {1,2,3,4}; int arr2[] = {...
2018-10-09 19:58:18
98
原创 c 编程练习
1.给定两个整形变量的值,将两个值的内容进行交换。#include<stdio.h>#include<stdlib.h>int main(){ int a = 10; int b = 20; int c; c = b; b = a; a = c; printf("%d,%d", a,b); system("pause"); return 0;}...
2018-09-25 18:10:46
126
原创 c 编程练习
1.打印100~200 之间的素数:#include<stdio.h>#include<stdlib.h>int main(){ int n = 100; int i = 2; for (n = 100; n <= 200; n++){ int flag = 0; for (i = 2; i < n; i++){ if (n%i ==...
2018-09-21 23:47:33
105
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人