自定义博客皮肤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)
  • 收藏
  • 关注

原创 VS2013C/C++方式读写二进制文件

//写文件 FILE *file; fopen_s(&file, "C:/Users/liu/Desktop/test.dat", "wb+"); int pchar[2] = { 10,20 }; fwrite(pchar, sizeof(int), 2, file); fclose(file);//读文件 int recvchar[20]; FILE *file1; ...

2020-04-29 09:19:49 1524 1

原创 VS下TCP通讯Demon

客户端:服务端:

2020-04-27 09:12:46 619

原创 VS下UDP通讯Demon

客户端:服务端:

2020-04-27 09:07:14 296

原创 Linux下测量代码执行时间

头文件:#include < sys/time.h >/*创建时间结构体用于记录开始时间以及结束时间*/struct timeval start_time,end_time;/*获取当前时间*/gettimeofday(&start_time,0);/*待测量时间的相关代码*//*……*/gettimeofday(&end_time,0);/*通过作...

2020-04-19 22:29:12 200

原创 Linux信号量的创建

头文件:#include < semaphore.h >/*创建信号量*/sem_t sem_test;/*初始化信号量为0*/sem_init(&sem_test,0,0);/*初始化信号量为1*/sem_init(&sem_test,0,1);/*post信号量*/sem_post(&sem_test);/*wait信号量*/sem_wa...

2020-04-19 22:20:08 728

原创 new与delete

使用new在自由存储区(堆)中申请内存:int *pi = new int;使用delete释放内存:delete pi;使用new创建动态数组:int *arr = new int[10];使用delete[]删除申请的内存块:delete[] arr;...

2020-04-08 22:00:48 130

原创 函数指针与指针函数

函数指针函数指针是一个指针,

2020-04-07 23:10:15 85

原创 MFC相关

构成MFC应用程序的四个基本类:1.CMYAPP派生于CWINAPP类,是应用程序运行的基础,应用程序启动时就会调用该类的InitInstance()函数负责应用程序的初始化工作。2.CMAINFRAME一个windows应用程序,除了白色部分的视图以外,程序主窗口的其他部分都归CMAINFRAME管理。MFC程序中,并不需要经常对CMAINFRAME类进行操作。3.CMYDOC4.C...

2020-03-30 19:24:28 59

原创 const对象/非const对象调用const成员函数/非const成员函数

非const对象既可以调用const成员函数,也可以调用非const成员函数。const对象只能调用const成员函数,不能调用非const成员函数。因为非const成员函数的this指针类型为非const,而const对象的指针类型为const,不可以将const指针作为参数传入非const成员函数。C++默认指向const对象的指针必须也具有const属性。...

2020-03-30 19:14:54 768

原创 VS中未定义基类问题以及变量的多重定义问题

以上问题多是由于头文件的相互包含引起,一方面头文件要使用条件编译,另一方面变量的定义要在源文件中进行,头文件中进行变量的申明工作。

2020-03-30 19:09:50 625

原创 fatal error LNK1123 错误解决方法

解决方法:(1)项目——>属性——>连接器——>清单文件 中生成清单 “是” 修改为 “否” 该方法一般都可以解决问题,但是每次创建项目都要设置一遍。(2)查找是否有两个cvtres.exe 删除较旧版本。 第一个是在 VS2010安装目录下 如(\Program Files\Microsoft Visual Studio 10.0\vc\bin\cvtres...

2020-03-28 18:54:06 731

转载 数据结构中的栈与堆

数据结构中的栈与堆.

2020-03-28 17:27:33 70

原创 内存划分中的堆和栈

栈内存:栈内存首先是一片内存区域,存储的都是局部变量,凡是定义在方法中的都是局部变量(方法外的是全局变量),for循环内部定义的也是局部变量,是先加载函数才能进行局部变量的定义,所以方法先进栈,然后再定义变量,变量有自己的作用域,一旦离开作用域,变量就会被释放。栈内存的更新速度很快,因为局部变量的生命周期都很短。堆内存:存储的是数组和对象(其实数组就是对象),凡是new建立的都是在堆中,堆中存放...

2020-03-27 20:35:42 153

原创

由下图开始介绍树(非线性结构)的基本概念:1.度:一个节点拥有的子节点的个数,A的度为2,BC的度为0.2.树的度:所有节点中度的最大值,上图中树的度为23.树的深度:树有几层,则深度为几,上图中树的深度为2特殊的树-二叉树二叉树的特性:1.非空二叉树只有一个根节点2.每一个节点最多有两颗子树(度最大为2)3.任意一颗二叉树,度为0的节点(叶子节点)总是比度为2的节点多一个特殊...

2020-02-15 11:12:37 52

原创 操作系统概念第六章-同步

多个进程并发访问和操作同一数据并且执行结果与访问顺序有关,称为竞争条件。为防止出现竞争条件,需确保一次只有一个进程可以操作数据,为此要求这些进程按照一定方式来进行同步。同步的解决方案1-互斥锁当一个进程试图获取不可用的锁时,它会阻塞,知道锁被释放。当有一个进程在临界区时,任何其他进程在进入临界区时必须连续循环地试图去获取锁(忙等待),这种类型的互斥锁也被称为自旋锁,因为进程不停地旋转以等待锁变...

2019-12-12 21:44:06 262

原创 操作系统概念第七章-死锁

死锁概念:一个进程A申请资源时,若申请的资源被其他等待进程B所占用,那么A有可能无法再改变其状态,这种情况称为死锁。如下交通即产生了死锁:正常操作模式下,进程只能按如下顺序使用资源:1.进程请求资源2.进程对资源进行操作3.进程释放资源死锁特征:如果在一个系统中以下四个条件同时成立,那么就能引起死锁:1.互斥。至少有一个资源处于非共享模式,即一次仅有一个进程可对其进行访问。2.占...

2019-12-12 20:58:37 227

原创 操作系统定义/存储设备

一个关于操作系统比较公认的定义:操作系统是一直运行在计算机上的程序(通常称为内核),其他程序则为系统程序和应用程序。可以这样理解:我们的电脑上有很多应用程序供用户使用,这些应用程序需要一些共同的操作,如控制I/O设备,操作系统就是一个软件模块,这个模块可以给应用程序分配I/O设备资源。存储设备如下存储设备:电子磁盘之上的设备存储速度快,数据易失,价格昂贵。电子磁盘之下的设备存储速度慢,数据不...

2019-12-12 20:31:01 235

原创 泛型算法

泛型算法中的泛型指的是他们可以操作在多种容器类型上-不但可以作用于vector或list这些标准库类型,还可用在内置数组类型,或者其他类型的序列上。如下标准库提供的find操作,不仅可以查找vector容器中是否存在某一个值,还可以查找List容器,甚至是数组中是否有某一个值。//value we'll look forint search_value = 42;//call find t...

2019-12-07 11:24:39 78

原创 顺序容器的基本操作

容器的begin和end操作c.begin() 返回指向容器c的第一个元素的迭代器c.end() 返回指向容器c的最后一个元素的迭代器在顺序容器中添加元素的操作c.pushback(t) 在容器c的尾部添加值为t的元素c.push(front) 在容器c的前端添加值为t的元素(适用于list及deque容器)c.insert(p,t) 在迭代器P所指向的元素前面插入值为t的元素c.i...

2019-12-04 21:40:55 55

原创 常用迭代器运算

如下8种迭代器运算适用于所有标准库容器(包括关联容器与顺序容器)类型:*iter 返回iter 所指向元素的引用iter->mem 对iter解引用,获取指定元素中名为mem的成员++iter 使其指向下一个元素iter++iter-- 使其指向上一个元素--iteriter1 == iter2 比较两个迭代器是否相等或不等。若两者指向同一容器中的iter1 != iter...

2019-11-28 22:37:04 356

原创 map容器相关操作与注意事项

由代码开始: map<string, int> word_count; word_count["Anna"] = 1; //使用下标访问Map对象 map<string, int>::iterator map_it = word_count.begin(); //map迭代器指向word_count第一个元素(pair类型) cout << map_it...

2019-11-23 15:21:45 185 1

原创 vector容器的自增长

void vetTest(){ vector<int> ivec; for (size_t i = 0; i != 10; i++) { ivec.push_back(i); } cout << "ivec.size = " << ivec.size() << " ivec.capacity = " << ivec....

2019-11-19 21:42:12 91

原创 C++中new与delete表达式

参考c++ primer第四版。以下两条语句:int * pi =new int(2014);delete pi;第一句new表达式在自由存储区分配创建了一个整型对象,并使用该对象的地址初始化pi;第二局delete表达式释放了pi指向的int型对象所占用的内存空间。注:如果指针指向不是用new分配的内存地址,则在该指针上使用delete是不合法的。如:int i;int * ...

2019-11-19 20:55:43 118

原创 TCP可靠传输的实现

1.停止等待协议停止等待协议比较简单,就是发送端发送乐意报文段以后如果在规定的时间内没有收到对方的确认,则会重新发送该报文。停止等待协议最重要的一点就是超时重传时间的选择,一般来说,超时重传时间要比往返时间RTT要长一些。计算报文段的往返时间RTT采用自适应算法。也就是说RTT是随着报文段的不停传输而不断更新的,具体计算如下:RTTs:平滑的往返时间a:加权系数RFC建议a取值1/...

2019-11-12 22:31:42 73

原创 TCP的三次握手与四次挥手

三次握手的解释可参考红蓝两军问题。四次挥手是由TCP的半关闭状态决定的。前两次挥手是为了双方确认客户机已经没有数据向服务器发送,但此时客户机仍然能接收服务器的数据。而后两次的挥手是双方确认服务器也不再向客户机发送数据。注:A发送完最后一个报文以后并不是立即进入closed状态,而是需要等待2MSL(最长报文段寿命,RFC793建议2分钟)的时间,这样是防止最后一包丢包,留有时间用来重传。...

2019-11-11 22:45:02 90

原创 TCP的拥塞控制

首先,TCP的拥塞控制和流量控制不是一个概念。拥塞控制是一个全局性的过程,目的是防止过多的数据注入网络,这样可以使网络中的路由器或链路不致过载 。流量控制往往是对点对点通信量的控制,一般是通过设置TCP头里面窗口字段的大小来抑制发送端发送数据的速率。可以说流量控制是拥塞控制的一种手段。...

2019-11-11 22:27:09 139

原创 快速排序实现及弊端

快速排序实现可参考该博主文章,里面说的很透彻:快速排序算法快速排序有两种实现方法,一种是挖坑,一种是交换,上述文章中的方法是基于交换进行的快速排序。快速排序在什么情况下最不利于发挥其有点:快速排序的一次划分算法从两头交替搜索,直到low和high重合,因此其时间复杂度是O(n);而整个快速排序算法的时间复杂度与划分的趟数有关。理想的情况是,每次划分所选择的中间数恰好将当前序列几乎等分,经...

2019-10-16 17:17:49 2662

原创 虚函数与动态绑定

看一个例子:#include "stdafx.h"#include <iostream>using namespace std;//using namespace string;class base { public: base() { cout << "“base constructor”" << endl; }; virtual ~bas...

2019-10-15 15:26:04 127

原创 C++中虚析构函数的作用

从一个例子开始:#include <iostream>using namespace std;class base{ base(){cout<<"base constructor.\n"<<endl;};//基类的构造函数 virtual ~base(){cout<<"base end.\n"<<endl;};//基类的虚析...

2019-10-12 15:16:57 117

原创 继承的三种形式,基类与派生类之间的转换,派生类的构造函数与析构函数

公用继承,私有继承与受保护继承公用继承 基类的public成员为派生类的Public成员,基类的protected成员为派生类的protected成员,基类的private成员为派生类的private成员;受保护继承 基类的public以及protected成员在派生类中为protected成员,基类的private成员为派生类的private成员;私有继承 基类的所有成员在派生类中均为pr...

2019-10-12 14:26:10 189

原创 类产生的原因及相关特性

类产生的原因及相关特性类的产生类的产生其实就是为了用户方便定义自己的数据类型,类性质和C++中的标准库类型如String类型是一样的。可使用关键字class或struct来定义类,二者唯一的差别就是类内部成员的默认访问级别,默认情况下struct的成员为public,而class成员为private。类的基本思想数据抽象和封装是类的基本思想。数据抽象是一种接口和实现分离的编程技术。类的...

2019-10-09 19:23:36 324

空空如也

空空如也

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

TA关注的人

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