![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 53
楚渐灵
没有比人更高的山,没有比脚更长的路。
展开
-
Boost文档搜索
源码戳这里Boost 文档搜索是基于 boost 文档的一个站内搜索引擎,当用户在页面上输入查询词后,就能查询出相关 boost 的在线文档。具体搜索过程:对离线版本的 html 文档进行解析,并将解析结果放到一个文本文件中读取处理好文本进行分词以及权重计算等过程,构建出正排索引和倒排索引对查询词进行分词,根据查询词的分词结果进行倒排索引查找,将结果按照权重进行排序通过 HTTP 服务器搭载搜索页面提供服务整个项目分为四个模块:预处理模块、索引模块、搜索模块、服务器模块预处理模块输入原创 2020-10-10 18:45:39 · 434 阅读 · 1 评论 -
协程实现网络服务器
对于操作系统而言,进程是最小的资源管理单元,线程是最小的执行单元。对于一个线程,在使用中,性能可能会受到以下因素的影响:涉及到线程阻塞状态和可运行状态之间的切换线程上下文的切换同步锁……所以引入协程——更加轻量级的线程。就像进程和线程的关系一样,一个进程可以拥有多个线程,一个线程可以拥有多个协程。协程是在用户态执行的,所以不会像线程切换那样消耗资源,使性能得到提升。可以说,线程是一个特殊的函数,这个函数可以在某个地方挂起,并且可以在挂起处继续运行。一个线程内可以由多个这样的特殊的函数在运行原创 2020-10-01 11:30:47 · 1034 阅读 · 2 评论 -
s1mple_cloud
简易云盘项目简介基于http协议实现本机与服务器之间文件的上传、下载、以及文件列表展示等功能。解决了网盘下载限速的问题。项目特点线程池多路转接套接字TCPHTTP流程设计搭建一个tcp服务器,接收客户端连接请求,建立连接基于多路转接模型进行总线事件监控,若有事件到来,则将描述符抛入线程池中线程池中的线程操作http协议格式请求数据解析http协议解析流程根据 \r\n\r\n 获取整个头部头部解析,得到 content-length,然后获取正文分析请求(请求方法原创 2021-02-19 20:40:43 · 129 阅读 · 0 评论 -
智能指针
为什么要使用智能指针?存在以下两个问题malloc 出来的空间,如果没有进行释放,存在内存泄漏的问题如果在 malloc 和 free 之间如果存在抛异常,那么还是有内存泄漏。这种问题就叫异常安全内存泄漏什么是内存泄漏,以及内存泄漏存在的危害什么是内存泄漏: 内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费内存泄漏的危害: 长期运行的程序出现内存泄漏,原创 2020-10-26 09:58:45 · 129 阅读 · 2 评论 -
C++11中的右值引用和lambda表达式
右值引用右值和左值是什么右值引用的概念\引用与右值引用完美转发lambda表达式语法规则函数对象右值引用右值和左值是什么普通类型的变量,有名字,可以取地址,都认为是左值。const修饰的常量,是左值如果表达式运行结果或单个变量是一个引用则认为是左值。如果表达式的运行结果是一个临时变量或者对象,认为是右值。需要注意的是int a = 10;这一句里边,a是左值,而10是右值并且是纯右值,因为10只是一个符号,没有具体的空间C++11对右值进行了严格的区分:C语言中的纯右值,比如:a+b.原创 2020-07-26 18:08:56 · 710 阅读 · 0 评论 -
map和set
map和set和是关联容器,和vector、list之类的不同,map和set一次存两个值,存的是是一个键值对,对于map存的是<key,value>,对于set存的是<value,value> 。mapmap的构造函数map<type,type> m1;map<type,type> m2(m1.begin(),m1.end());map<type,type> m3(m2);map支持迭代器。map的接口bool empty(原创 2020-07-14 16:09:57 · 202 阅读 · 0 评论 -
AVL树
什么是AVL树首先AVL树是二叉搜索树,但是严格的控制高度,因为如果插入树的序列原本就是有序的,那二叉搜索树就近似于链表,查找效率极其低下,所以就引入AVL树并且满足下列条件。每个结点左右子树高度差不超过 1左右子树仍然满足上述条件由于严格的控制高度,所以AVL树的查找效率还是 O(log2N),如果有N个结点,就会把树的高度控制在O(log2N)AVL树的插入首先按照二叉搜索树的插入方式进行插入(如果为空直接插入作根节点,如果不为空,比当前结点大就到左子树,比当前结点小就到右子树,在合适的原创 2020-07-01 01:17:23 · 275 阅读 · 0 评论 -
list 和 vector 的比较
首先揭晓答案,vector 和 list 之间没有胜负!因为 vector 就像数组,而 list 就像链表,都可以存储数据,但是各有优缺点,只是我们在使用的过程中,需要“因地制宜”。list和vector的使用list和vector的使用基本相同,包括构造函数,迭代器,基本操作函数等,那么使用具体参照vectorlist和vector的比较list:底层结构是带头节点的双向循环链表在任意位置插入和删除的效率高,时间复杂度为O(1)不支持随机访问迭代器失效:插入元素不会导致迭代器失效,.原创 2020-06-02 16:37:08 · 407 阅读 · 0 评论 -
vector
vetcor的使用构造函数构造函数列表构造函数使用示例迭代器迭代器的定义迭代器的使用基本功能函数构造函数构造函数列表构造函数详细信息vector无参构造函数vector(size_type n,const value_type& val = value_type())构造大小为 n,值都为 val的vectorvector(const vector& x)拷贝构造函数vector(InputIterator first, InputItera原创 2020-05-27 11:53:30 · 258 阅读 · 0 评论 -
C++中的模板是啥?
假如现在写了一个 int 类型的 swap 函数,但是又可能会用到 double 类型的 swap,或者 char 类型的……要是这样一遍一遍去写一个同样的功能只是参数类型不同的函数,那简直是太烦人了,所以,福音来了!模板函数就解决了这个问题。就是说像一个模具一样,你要个啥样的,就可以立马做一个出来。那先来说最重要的,怎么做出来这个模板,也就是格式:template< typename ...原创 2020-05-05 17:40:30 · 359 阅读 · 0 评论 -
C/C++中的内存管理
在C语言中,用 malloc/realloc/calloc和free实现动态内存管理,在C++中则使用的是 new 和 delete举个栗子:int main(){ int *p1 = new int; // 动态申请一个int类型的空间 int *p2 = new int(0); // 动态申请一个int类型的空间并初始化为0 int *p3 = new int[5]; /...原创 2020-05-05 17:07:15 · 163 阅读 · 0 评论 -
类和对象中的一些琐碎的知识
常常看到某些贵族一到情人节就赶紧给自己 new 一个对象今天便来说说他们的对象和一个叫类的东西之间的关系类类的定义:类在C++中是由关键字 class 加上类名后面再跟上一对花括号构成的,花括号中便是类的主体,类中的东西都是类的成员,可以是变量也可以是函数。在C++中还可以用 struct 关键字来定义类,但是在C语言中,它只能被用来定义结构体。class 和 struct 的一个区别就...原创 2020-05-05 12:18:46 · 205 阅读 · 0 评论