C++
文章平均质量分 55
Mr_Csyn
这个作者很懒,什么都没留下…
展开
-
http服务器的实现
对于HTTP的简单理解http服务器简介HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。HTTP 是一个基于TCP/IP 通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)http工作原理http协议工作于客户端-服务端架构上,浏览器作为http客户端通过URL向http服务器即web服务器发送所有请求,web服务器根据接收到的请求向客户端发送原创 2021-11-21 16:38:05 · 2365 阅读 · 0 评论 -
类与对象
###知识点面向对象的基本思想类和对象的基本概念C++中的类及其定义关于类和对象面向对象基本思想面向对象程序设计(OOP)最重要的核心特性之一是将整个程序分为若干个小的实体,称为对象,他们具体明确定义的交互作用,优点是显著减小了整体的复杂性封装:代码的分而治之,数据与代码分而治之把数据和相关操作装到一个“黑匣子”——对象向外界隐藏了内部的数据结构,表达式和过程对外展示,非具体操作抽象:只呈现数据的行为,而隐藏数据的细节C++语言的类结构支持数据抽象和数据封装###C+原创 2021-02-27 10:27:17 · 73 阅读 · 0 评论 -
set容器
二叉树概念二叉树就是任何结点最多只允许有两个字节点,分别是左子结点和右子节点二插搜索树,指二叉树的结点按照一定规则进行排序,使得队二叉树中元素访问更加高效二插搜索树规则,任何结点的元素值一定大于其左子树的每一个结点的元素值,并且小于其右子树的值,因而从根结点一直往左走,走到最小值,一直往右走,走到最大值set容器关联容器,根据规则插入元素所有元素会根据元素的值自动进行排序,set容器是以红黑树为底层机制,查找效率好,不允许出现重复元素不能通过迭代器改变元素的值,因为et元素是根据元素值进原创 2021-02-27 10:26:01 · 87 阅读 · 0 评论 -
线性表
线性表基本概念线性表是零个或者多个数据元素的有限序列数据元素之间是有顺序的数据元素个数是有限的数据元素的类型必须相同线性表性质a0为线性表的第一个元素,只有一个后继,没有前驱an为线性表最后一个元素,只有一个前驱,没有后继除了a0和an外的其他元素ai,既有前驱,也有后继线性表能够逐项访问和顺序存取线性表操作创建线性表销毁线性表清空线性表将元素插入线性表将元素从线性表中删除获取线性表中某个位置的元素获取线性表的长度线性表的顺序存储用一段地址连续的存储单元依原创 2021-02-27 10:25:11 · 68 阅读 · 0 评论 -
vector容器
概念动态数组,可变数组是一个单口容器,尾部插入删除的效率更高,从其他位置插入删除会引起其他元素的移动,从而效率低下pushback()方法尾部插入提供pop_back(),尾部删除用.begin()和.end()标识结尾和开头,end不是元素位置动态增长基本原理申请一块更长的内存空间把原有元素拷贝到新的内存空间把增长的元素拷贝到新空间指针指向新的空间,释放旧的空间vector构造函数vector<T> v;//采用模板实现类实现,默认构造函数vector(v.b原创 2021-02-27 10:24:10 · 81 阅读 · 0 评论 -
信号
信号机制A给B发信号,B收到信号后暂停运行,处理信号,处理完毕后,继续执行简单、不能携带大量信息、满足条件才发送每个进程收到的信号都是由内核发送、内核处理的信号相关的事件和状态信号产生方式硬件异常产生:非法访问,内存对齐、除0按键产生命令产生:kill等等系统调用:kill、raise软件条件:定时器,程序设计递达递送并且到达进程未决产生和递达之间的状态,主要由于阻塞导致该状态信号处理方式执行默认动作忽略(丢弃)捕捉(调用用户处理函数)阻塞信号集将信号加原创 2021-02-27 10:22:01 · 86 阅读 · 0 评论 -
线程
线程线程概念线程有独立的PCB,但没有独立的地址空间进程有独立的地址空间,有独立的PCB两者区别在于是否共享地址空间线程本质还是进程线程可以看做是寄存器和栈的集合线程共享资源文件描述符每种信号的处理方式当前工作目录用户id和组id内存地址空间线程非共享资源线程id处理器现场(寄存器的值)和栈指针独立的栈空间errno变量,本质是个全局变量信号屏蔽字调度优先级线程优缺点优点提高程序的并发性开销小数据通信、共享数据方便缺点库函数不稳定调原创 2021-02-26 15:23:09 · 84 阅读 · 0 评论 -
文件存储
Inode本质为结构体,存储文件的属性信息,例如权限、类型、大小、时间等等也称为文件属性管理结构,大多数inode都存储在磁盘上少量、近期使用的inode会被缓存到内存中dentrydentry是一个内存实体,其中的d_inode成员指向对应的inodedentry里面也存有文件名、硬链接名也称目录项stat函数用于获取文件属性,从inode结构体中获取lstat函数与stat函数没什么区别,但lstat不会穿透链接,stat会函数原型int stat(const原创 2021-02-26 15:22:37 · 654 阅读 · 0 评论 -
实现信号捕捉
信号捕捉signal函数注册一个捕捉函数,捕捉实际由内核进行一般不用这个函数,用sigactiontypedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler);//signum是设置的捕捉信号//handler是具体捕捉后函数操作sigaction进程正常运行时,默认PCB中有一个信号屏蔽字,假定为*,它决定了进程自动屏蔽了哪些信号,当注册了某一个信号捕捉函数,捕捉到该原创 2021-02-26 15:20:26 · 208 阅读 · 0 评论 -
静态库和动态库
静态库静态库基本概念一般扩展名为(.a或.lib),这类的函数库通常扩展名为libxxx.a或xxx.lib 。在可执行文件运行之前就已经加入到执行码中,称为执行程序的一部分这类库在编译的时候会直接整合到目标程序中,所以利用静态函数库编译成的文件会比较大,这类函数库最大的优点就是编译成功的可执行文件可以独立运行,而不再需要向外部要求读取函数库的内容;但是从升级难易度来看明显没有优势,如果函数库更新,需要重新编译。静态库制作步骤生成.o文件使用ar工具制作静态库ar rcs libmy原创 2021-02-26 15:20:01 · 80 阅读 · 0 评论 -
基础命令
基础概念shell命令 unix系统bash Linux命令命令解析器根据名字调用快捷键Ctrl+N Ctrl+P历史命令切换Ctrl+B Ctrl+F光标左右移动,Ctrl+A Ctrl+E移动到行首行尾删除Ctrl+U 删除光标前面所有字符Ctrl+D删除光标后面一个字符基础命令cd切换路径命令ls命令ls -a显示全部ls -l显示详细信息ls -la综合上面1 2也可以加路径pwd查看当前路径mkdir创建文件夹mkdir fil原创 2021-02-26 15:18:45 · 119 阅读 · 0 评论 -
会话
进程组和会话进程组多个进程组成进程组父进程创建子进程,默认父进程与子进程处于同一进程组组长进程ID就是组ID进程组生存期从进程组创建到最后一个进程结束一个进程可以为自己和子进程设置组ID可以使用kill将整个组进程全部杀死会话多个进程组组成会话创建会话调用进程的不能是进程组的组长,该进程会成为新会话的首进程该进程成为一个新进程组的组长进程需要有root权限(ubuntu不需要)新会话丢弃原有的控制终端,该会话没有控制终端该调用进程是组长进程,则出错返回建立新会话时,原创 2021-02-26 15:18:14 · 84 阅读 · 0 评论 -
管道
管道的概念本质:内核缓冲区伪文件,不占用磁盘空间特点:读端,写端,对应文件描述符数据写端流入数据读端流出操作管道的进程被销毁了之后,管道自动被释放了管道默认是阻塞的管道的原理内部实现方式:队列环形队列缓冲区大小:默认4K,4096大小会根据实际情况适当调整管道的局限性队列:数据只能读取一次,不能重复读取半双工:数据传输方向单向只能自己写不能自己读匿名管道适用于有血缘关系的进程创建匿名管道int pipe(int fd[2])原创 2021-02-26 15:17:43 · 65 阅读 · 0 评论 -
程序和进程_并行和并发
程序和进程程序程序就是一个二进制文件,占用磁盘空间,不运行的进程进程就是一个启动的程序所有的数据都在内存中需要更多的系统资源CPU,物理系统内存进程的状态初始态就绪态,有CPU执行资格,没有执行权,等待运行态,有CPU执行资格和执行权挂起态,失去CPU执行资格和执行权终止态并发和并行并行并行是指两个或以上事件在同一时刻进行并发并发是指两个或以上事件在同一时间间隔内发生。在操作系统中,一段时间有多个进程都处于启动运行到运行完毕之间的状态。但任一时刻只有一个进程原创 2021-02-26 15:17:10 · 261 阅读 · 0 评论 -
read_write函数读写文件以及文件状态
read/write函数ssize_t read(int fd, void *buf, size_t count);ssize_t write(int fd,const void *buf,size_t count);read和write函数原型类似,要注意第三个参数write()//头文件:#include<unistd.h>原型:ssize_t write(int fd,const void*buf,size_t count);参数说明: fd:是文件描述符(wri原创 2021-02-26 15:15:39 · 1175 阅读 · 0 评论 -
open_close函数
open/close函数函数原型int open(const char *pathname, int flags);int open(const char *pathname, int flags, more_t mode);int close(int fd);常用参数O_RDONLY 只读O_WRONLY 只写O_RDWR 可读可写打开/创建文件时,至少得使用上述三个常量中的一个,以下常量是选用的:O_APPEND 每次写操作都写入文件的末尾O_CREAT 如原创 2021-02-26 15:15:00 · 406 阅读 · 0 评论 -
lseek函数
lseek函数应用场景:文件的读写使用同一偏移位置使用lseek获取和拓展文件大小,必须引起IO操作off_t lseek(int fd, off_t offset, int whence);//fd:文件描述符//offset:偏移量//whence:起始偏移位置//返回值:// 成功:始位置偏移量// 失败:-1代码示例#include <stdio.h>#include <stdlib.h>#include <string.h原创 2021-02-26 15:13:21 · 109 阅读 · 0 评论 -
Linux基础概念
linux中所见皆文件文件目录bin:存放二进制可执行文件boot:存放开机启动程序dev:存放设备文件,字符设备、块设备home:存放用户etc:用户信息和系统配置文件lib:库文件,比如stdio.hroot:管理员宿主目录,家目录usr:用户资源管理目录,第三方应用程序Linux系统文件类型普通文件: - f目录文件: d字符设备文件: c块设备文件: b软连接: l管道文件: p套接字: s未知文件软链接为保证软连接可以随意搬移,应该采用绝对路径原创 2021-02-26 15:12:39 · 75 阅读 · 0 评论 -
查找算法和常用遍历
查找算法代码示例#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<vector>#include<algorithm>#include<functional>#include<string>using namespace std;//常用的查找算法void test01(){ vector<int> v1; for (int i = 0; i原创 2020-12-01 09:56:47 · 208 阅读 · 0 评论 -
STL函数对象
函数对象基本概念函数对象又叫仿函数,是行为类似函数的对象本质上就是重载"()"操作符,使得类对象可以像函数对象那样调用函数对象是一个类,不是一个函数,只是说行为像函数函数对象的函数可以有参数和返回值重载operator()要求获取的几个参数,就称为几元函数函数对象特性函数对象可以像普通函数一样调用函数对象可以像普通函数那样接收参数函数对象超出了普通函数的概念函数对象可以保存函数调用的状态函数基本对象代码示例#define _CRT_SECURE_NO_WARNINGS#in原创 2020-11-29 21:52:58 · 148 阅读 · 0 评论 -
深浅拷贝及STL共性
浅拷贝浅拷贝由于拷贝后共用同一个地址,有些时候会析构两次,造成程序宕掉浅拷贝的是调用的STL默认构造函数深拷贝深拷贝是使用者自定义的拷贝构造函数深拷贝往往新分配一个地址内存浅拷贝和深拷贝代码#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<vector>#include<map>#include<string>using namespace std;clas原创 2020-11-29 10:30:34 · 181 阅读 · 0 评论 -
map容器
map/multimap容器相对于set容器来说,map具有键值和实值所有元素自动排序,pair的第一元素称为键值,第二元素称为实值map也是以红黑树为底层实现机制multimap的键值可以重复,map的键值不可以重复不能通过迭代器修改键值,规则会乱map构造函数map<T1,T2> mapTT;//map默认构造函数map(const map &mp);//拷贝构造函数map赋值操作map& operator=(const map &mp);/原创 2020-11-28 15:21:52 · 170 阅读 · 0 评论 -
set容器
二叉树概念二叉树就是任何结点最多只允许有两个字节点,分别是左子结点和右子节点二插搜索树,指二叉树的结点按照一定规则进行排序,使得队二叉树中元素访问更加高效二插搜索树规则,任何结点的元素值一定大于其左子树的每一个结点的元素值,并且小于其右子树的值,因而从根结点一直往左走,走到最小值,一直往右走,走到最大值set容器关联容器,根据规则插入元素所有元素会根据元素的值自动进行排序,set容器是以红黑树为底层机制,查找效率好,不允许出现重复元素不能通过迭代器改变元素的值,因为et元素是根据元素值进原创 2020-11-27 13:28:02 · 97 阅读 · 0 评论 -
栈队链容器
stack容器栈容器,先进后出,只有一个出口,只允许栈顶新增和删除元素不允许有迭代器,也没有遍历不支持随机存取stack构造函数stack<T> stkT;//stack采用模板实现,stack对象的默认构造形式stack(const stack &stk);//拷贝构造函数stack赋值操作stack& operator=(const stack &stk);//重载等号操作符压栈、出栈stack.push(elem);//压栈到栈顶sta原创 2020-11-26 20:26:07 · 82 阅读 · 0 评论 -
C++基本控制结构程序设计
算法概念特征可执行性,每一步计算机均可执行确定性,每一步均有明确的定义,不能有歧义有穷性,算法执行有限步后完成,不能有无限循环可输入输信息,算法表示顺序分支循环代码判断是否闰年int year;cout<<“输入年份:”<<endl;cin>>dec>>year;if(year%40&&ye...原创 2020-01-15 16:18:46 · 276 阅读 · 0 评论 -
deque容器
概念双口容器,支持随机存取,可以在两端做插入和删除操作没有容量概念,是动态的以分段的连续空间组合而成,随时可以增加一段新的空间并拼接起来,也因此deque没有必要做空间保留功能指定位置的插入也会导致元素位置移动,效率低deque构造函数deque<T> deqT;//默认构造形式deque(beg,end);//构造函数将[beg,end]区间的元素拷贝过来给本身deque(n,elem);//构造函数将n个elem拷贝给本身deque(const deque &de原创 2020-11-25 23:44:50 · 210 阅读 · 0 评论 -
vector容器
概念动态数组,可变数组是一个单口容器,尾部插入删除的效率更高,从其他位置插入删除会引起其他元素的移动,从而效率低下pushback()方法尾部插入提供pop_back(),尾部删除用.begin()和.end()标识结尾和开头,end不是元素位置动态增长基本原理申请一块更长的内存空间把原有元素拷贝到新的内存空间把增长的元素拷贝到新空间指针指向新的空间,释放旧的空间vector构造函数vector<T> v;//采用模板实现类实现,默认构造函数vector(v.b原创 2020-11-24 23:57:30 · 355 阅读 · 0 评论 -
String容器
string容器概念char*是一个指针,string是一个类,string封装了char*,管理这个字符串,是一个char*型的容器string封装了许多实用的成员方法,例如查找find,拷贝copy,删除delete,替换,插入等等不用考虑内存释放和越界,string管理char*所分配的内存,每一次string的复制,取值都由string类负责维护,不用担心复制越界和取值越界等string和char*可以相互转换s.at(i)和s[i]的区别在于s.at(i)若越界会抛出异常out_of_原创 2020-11-24 09:28:24 · 150 阅读 · 0 评论 -
STL基本理论容器
STL基本概念STL叫标准模板库,几乎所有代码都采用了模板类或者模板函数,更好的提供了代码重用广义上分为了容器,算法和迭代器,容器与算法之间通过迭代器无缝连接优点是不需要额外安装什么,被内建在编译器中特点是数据结构与算法分离,使得STL变得通用容器容器可以嵌套容器包含序列式容器和关联式容器序列式容器,元素位置由进入容器的时机和地点决定关联式容器,已经有规则,元素位置不由进入容器的时机和地点决定迭代器可以理解为指针,默认指向第一个元素对指针的操作都可以对指针操作迭代器实际上原创 2020-11-23 12:32:25 · 198 阅读 · 2 评论 -
文件操作
文件的读写操作文件输入流ifstream文件输出流ofstream文件输入输出流fstream文件的打开方式文件流的状态文件流的定位:文件指针(输入指针、输出指针)文本文件和二进制文件文件流和文件流对象ifstream类,他是从istream类中派生的,用来支持磁盘文件的输入ofstream类,他是从ostream类中派生的,用来支持磁盘文件的输出fstream类,他是从iostream类中派生的,用来支持磁盘文件的输入输出写文件操作包含头文件include <原创 2020-11-20 21:51:56 · 82 阅读 · 0 评论 -
输入输出流
文件IO和标准输入输出键盘输入输出叫标准输入输出文件的输入输出叫文件I/O一般过程是键盘输入到输入缓冲区,到程序到输出缓冲区,输出缓冲区到显示器缓冲区输入缓冲区,本质上就是一块内存,键盘输入到这块内存输出缓冲区,程序输出到缓冲区,缓冲区输出到显示器显示,endl会输出换行并且立即刷新缓冲区,代码cout<<“hello world”;在Linux下不会输出,必须加endl才会输出<iostream>中cerr没有缓冲区直接输出到显示器,clog有缓冲区,通过缓冲区原创 2020-11-19 16:50:53 · 204 阅读 · 0 评论 -
MyArray容器
MyArray新建一个容器,存储各种数据类型#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;template<class T>class MyArray{public: MyArray(int capacity) { this->mCapacity = capacity;//长度,声明MyArray长度多长 this->mSize = 0;//当前长原创 2020-11-19 07:48:45 · 255 阅读 · 0 评论 -
类与对象
###知识点面向对象的基本思想类和对象的基本概念C++中的类及其定义关于类和对象面向对象基本思想面向对象程序设计(OOP)最重要的核心特性之一是将整个程序分为若干个小的实体,称为对象,他们具体明确定义的交互作用,优点是显著减小了整体的复杂性封装:代码的分而治之,数据与代码分而治之把数据和相关操作装到一个“黑匣子”——对象向外界隐藏了内部的数据结构,表达式和过程对外展示,非具体操作抽象:只呈现数据的行为,而隐藏数据的细节C++语言的类结构支持数据抽象和数据封装###C+原创 2020-11-19 07:43:42 · 104 阅读 · 0 评论 -
异常机制
异常概念异常处理就是处理程序中的错误种类很多,包括返回异常等等异常优势函数返回值可以忽略,但异常不可忽略,没有被捕获就会程序终止整形返回值没有任何语义信息,而异常包含语义信息,有时类名即可体现整形返回值缺乏上下文信息,异常作为一个类,可以拥有自己的成员,成员可以传递足够的信息异常处理可以在调用跳级,这是一个代码编写问题;假设在有多个函数调用栈中出现了某个错误,使用整型返回码要求你在每一个级函数中都要进行处理,而使用异常处理的栈展开机制,只需要在一处进行处理就可以了,不需要每一级函数都处理原创 2020-11-18 23:17:14 · 87 阅读 · 0 评论 -
类型转换基本语法
类型转换通过改变一个变量的类型为别的类型从而改变该变量的表示方式相比之下,C语言更为暴力,没有类型检查,不安全C++四种风格转换操作符static_cast基础数据类型以及具有继承关系的指针对象dynamic_cast通常在基类与派生类之间转换时使用const_cast主要针对const的转换reinterpret_cast用于进行没有任何关联之间的转换,比如一个字符指针转换成一个整数类型的指针代码:#define _CRT_SECURE_NO_WA原创 2020-11-15 17:16:05 · 190 阅读 · 0 评论 -
函数模板基本语法
函数模板类模板函数体一样重复写函数体增加成本,模板技术应运而出//int类型数据交换void MySwap(int& a, int& b){ int temp = a; a = b; b = temp;}//double类型void MySwap(double& a, double& b){ double temp = a; a = b; b = temp;}模板技术,类型参数化,编写代码可以忽略类型<…>里面可以有多原创 2020-11-03 10:23:44 · 116 阅读 · 0 评论 -
函数指针与指针函数
指针函数指针函数顾名思义,返回值是指针类型的函数,即返回了一个地址形式如下int* pointerFunction(int a,int b);*与int一起主要是可读性函数实现例子int* pointerFunction(int a,int b){ int *p=(int *)malloc(sizeof(int *)); *p=a+b; return p;}主函数中用指针变量接收pointerFunction(int a,int b)的返回值,非原创 2020-10-26 12:33:25 · 77 阅读 · 0 评论 -
多态
多态什么是多态C++中所谓多态是指,由继承而产生的的相关的不同的类,其对象对同一信息做出的不同响应多态是面向对象编程语言的重要特征,能增加程序的灵活性。可以减轻系统的升级、维护、调试的工作量和复杂度比如父类与子类同一方法名,子类重构改方法,父类中用虚函数,关键字virtual#include<iostream>using namespace std;class Suckler{public: virtual int getIq() { int IQ = 5;原创 2020-10-25 17:52:49 · 88 阅读 · 0 评论 -
继承与派生
继承与派生类的继承与派生继承的优点和缺点:代码共享,减少创建类的工作量,每一个子类都有父类的方法和属性提高代码的重用性,减少代码的冗杂程度提高代码的可拓展性,调用别人的接口,加继承父类实现继承是侵入性的,子类拥有父类的全部属性和方法增强了耦合性,父类常量、变量、方法被修改时,子类可能需要重构继承代码示例class Student{public: Student(int id, string name) { this->id = id; this->name原创 2020-10-21 16:05:53 · 221 阅读 · 0 评论 -
自定义MyString类
##自定义MyString类//.h文件#pragma once#include <iostream>//#include <string>using namespace std;class My_String{public: My_String();//无参构造 My_String(int len);//创建一个长度是len的string对象 My_String(const char* str); My_String(const My_String &am原创 2020-10-17 16:55:28 · 560 阅读 · 0 评论