自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 5种IO模型

一、概述五种IO模型包括:阻塞IO、非阻塞IO、信号驱动IO、IO多路转接、异步IO。其中,前四个称为同步IO。1、什么是IOIO (Input/Output,输入/输出)即数据的读取(接收)或写入(发送)操作,通常用户进程中的一个完整IO分为两阶段:用户进程空间<–>内核空间、内核空间<–>设备空间(磁盘、网络等)。IO有内存IO、网络IO和磁盘IO三种,通常我们说的IO指的是后两者。网络I/O就是通过网络进行数据的拉取和输出。磁盘I/O主要是对磁盘进行读写工作。比如你打

2020-07-13 11:31:29 429

转载 怎么限制一个类的对象实例,只能在“堆“上分配,或者只能在“栈“上分配

在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数。动态建立类对象,是使用new运算符将对象建立在堆空间中。这个过程分为两步,第一步是执行operator new()函数,在堆空间中搜索合适的内存并进行分配;第二步是调用构造函数构造对象,初始化这片内存

2020-07-12 16:32:39 299

原创 C++:四大类型转换

四大类型转换前言dynamic_caststatic_castconst_castreinterpret_cast前言C语言的类型转换比较自由,但也带来了一些问题,这些问题大多由程序员自行控制和解决。对于庞大的C++语言机制而言,这种简单粗暴的类型转换方式显然是个巨大的负担,因此C++引入4种类型转换运算符,更加严格的限制允许的类型转换,使转换过程更加规范:dynamic_cast 用于多态类型的转换static_cast 用于非多态类型的转换const_cast 用于删除const ,volat

2020-07-12 16:20:53 469

转载 C++类内存分布

一、成员函数成员函数可以被看作是类作用域的全局函数,不在对象分配的空间里,只有虚函数才会在类对象里有一个指针,存放虚函数的地址等相关信息。成员函数的地址,编译期就已确定,并静态绑定或动态的绑定在对应的对象上。对象调用成员函数时,早在编译期间,编译器就可以确定这些函数的地址,并通过传入this指针和其他参数,完成函数的调用,所以类中就没有必要存储成员函数的信息。二、成员变量下面可以定义一个类,像下面这样:class Base{ int a; int b;public:

2020-07-11 15:47:23 265

原创 C++ 构造函数与初始化列表

一、初始化与赋值的区别意义上:1)初始化:一个变量或者一个对象在产生的时候就赋予一个值,属于伴随性质2)赋值:在一个变量或者一个对象在产生之后的任意时刻赋予一个值,属于任意性质宏观代码上:1)两者作用相同2)对于数组和结构体来说,初始化和赋值的的形式不同。对于数组,可以使用花括号一起初始化,如果赋值的话,就只能单个元素就行;对于结构体,可以使用花括号初始化,否则只能通过“.”来访问变量进行赋值二、构造函数特点1、造函数也是一个函数,这个函数有几个特点:1)函数的名字与类的名字相同2)在创

2020-07-11 15:24:40 1420

转载 面向对象--虚机制

虚机制,一个听起来不好惹的角色,却是C++面向对象部分的精髓。不得不承认的是,这部分的内容有些多,也不太好理解。但同样不得不承认的是,虚机制在面向对象部分准确说是多态特性发挥着举足轻重的作用。可以说没有了虚机制,C++的面向对象就没有了灵魂。因此,这一篇,我们就来整理有关虚机制的内容。本文的内容思维导图如下虚函数的创建和实现这虚函数也是函数啊,唯一不同的就是它比较虚~~因此,只需要在成员函数前面加上“虚”就完事了。虚函数必须是成员函数这里,需要强调,虚函数必须是成员函数!!!对于这样的定义:

2020-07-10 14:06:26 424 1

转载 同步、异步、阻塞、非阻塞

1 同步与异步#首先来解释同步和异步的概念,这两个概念与消息的通知机制有关。也就是同步与异步主要是从消息通知机制角度来说的。1.1 概念描述所谓同步就是一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成,这是一种可靠的任务序列。要么成功都成功,失败都失败,两个任务的状态可以保持一致。所谓异步是不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了。至于被依赖的任务最终是否真正完成,依赖它的任务无法确定

2020-06-30 09:42:25 178

原创 排序算法总结

c++经典排序算法总结算法分类###一、冒泡排序//冒泡排序void BubbleSort(int* h,size_t len){ if(h==NULL) { return; } if(len<=1) { return; } for(int i=0;i<len-1;++i) { for(int j=0;j<len-1-i;++j) {

2020-06-28 19:43:56 124

原创 C++字符串

C风格字符串尽管C++支持C风格字符串,但在C++程序中最好还是不要使用它们。这是因为C风格字符串不仅使用起来不方便,而且极其容易引发程序漏洞,是诸多安全问题的根本原因。C风格字符串不是一种类型,而是为了表达和使用字符串而形成的一种约定俗成的写法。|函数 | 说明 || strlen() |返回p的长度,空字符不计算在内|| strcmp(p1,p2) | 比较p1和p2的相等性。如果p1==p2,返回0;如果p1>p2,返回一个正值,否则返回负值 || strcat(p1,p2)

2020-06-24 10:12:06 764

转载 网络编程之I/O复用

原理解析一、socket1、socket创建过程//创建socket int s = socket(AF_INET, SOCK_STREAM, 0); //绑定 bind(s, ...) //监听 listen(s, ...) //接受客户端连接 int c = accept(s, ...) //接收客户端数据 recv(c, ...); //将数据打印出来 printf(...) 注:Recv 是个阻塞方法,当程序运行到 Recv 时,它会一直等待,直到接收到数据才往

2020-06-22 17:14:30 161

转载 非递归树

树的递归与非递归#include<iostream>#include<vector>#include<stack>using namespace std;class TreeNode{ public: TreeNode(int data):val(data){}; ~TreeNode(); int val; TreeNode* left; TreeNode*

2020-06-19 23:14:51 127

转载 单例模式

单例模式一、简介单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。二、基本实现思路单例模式要求类能够有返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用initance这个名称)

2020-06-19 17:26:27 224

转载 LRU

LRU的实现LRU的c++实现,使用的是双向链表+map。链接: [https://blog.csdn.net/weixin_43819197/article/details/95901964).#ifndef _LRU_H#define _LRU_H#include<map>class CatchLRU{ public: CatchLRU(int size); ~CatchLRU(); struct CatchNod

2020-06-19 12:09:33 96

空空如也

空空如也

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

TA关注的人

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