
C++
爱喝可乐的loser
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
项目笔记 | 基于自建http协议的共享目录服务器
前言百度网盘存储功能方便了我们存储资料不仅限于物理设备,但是对于普通用户难以忍受限速的操作。在学习了网络编程之后,决定自己写一个基于http协议的共享目录,方便客户端将文件目录上传到服务端,支持目录列表展示,文件上传,文件下载,断点续传。1. 框架流程跟着想法画的,难免有些粗糙:对流程总结一下:搭建tcp服务器,用epoll进行事件监控判断事件是监听事件时,放置线程池任务队列,调用...原创 2020-03-21 14:04:42 · 373 阅读 · 0 评论 -
[散列 | C++实现]
1.常见的哈希函数1.1 直接定址法取关键字的某个线性函数为散列地址:Hash(Key)= A*Key + B1.2 除留余数法设散列表中允许的地址数为m,取一个不大于m,但最接近或者等于m的质数p作为除数,按照哈希函 数:Hash(key) = key% p(p<=m),将关键码转换成哈希地址2. 闭散列闭散列:也叫开放定址法,当发生哈希冲突时,如果哈希表未被装满,说明在哈希表...原创 2020-03-10 19:25:46 · 273 阅读 · 0 评论 -
选择 | 插入排序 | C++实现
1. 选择排序初始最小值为数组第一位,向后寻找比它小的,有的话更换下标,退出本次循环后,让最小值与第第一位交换,随后直至最后一位。原创 2020-03-09 19:51:45 · 145 阅读 · 0 评论 -
红黑树 | C++实现
1.红黑树的定义与性质红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过 对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩 倍,因而是接近平衡的。性质:每个结点不是红色就是黑色。根节点是黑色的。如果一个节点是红色的,则它的两个孩子结点是黑色的。对于每个结点,从该结点到其所有后代叶结点的简单...原创 2020-03-09 17:13:46 · 167 阅读 · 0 评论 -
堆 | C++
1. 堆的定义堆是一种基于完全二叉树的数据结构。每个父节点都大于等于(或者小于等于)它的两个子节点的完全二叉树就是堆。大堆:大于等于的情况称为大根堆。小堆:小于等于的情况称为小根堆。2. 堆的建立因为堆是完全二叉树,所以可以用数组来存储。比如父节点的下标为i,那么它的左孩子为(i + 1)/ 2 + 1,右孩子为(i + 1)/ 2 + 2;如果某叶子节点的下标为i,则它的父亲节点为...原创 2020-03-08 20:06:09 · 285 阅读 · 0 评论 -
AVL树 | C++实现
1. AVL树的定义一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:它的左右子树都是AVL树左右子树高度之差(简称平衡因子)的绝对值不超过1(-1/0/1)2. 节点定义struct AVLNode{ AVLNode(const T& data) :_data(data) ,_left(nullptr) ,_right(nullptr) ,_par...原创 2020-03-08 18:01:57 · 191 阅读 · 0 评论 -
搜索二叉树 | C++实现
1. 搜索二叉树的定义二叉搜索树又称二叉排序树,它可以是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值。若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 。它的左右子树也分别为二叉搜索。2.插入情况1 : 树为空直接插入情况2:树不为空从根节点开始判断,如果大于当前节点,则向右出发,否则向左。3.删除情况1...原创 2020-03-08 15:14:57 · 146 阅读 · 0 评论 -
归并 | 快排 C++实现
1.归并排序1.1 算法原理将一组数据一分为二。对两组数据不断递归排序,直至每组数据为最下规模。将排序好的两组数据进行合并。1.2 实现代码#include <iostream>#include <vector>void Merge(std::vector<int>&a,int left, int right, int mid){...原创 2020-03-06 18:24:57 · 170 阅读 · 0 评论 -
[STL:]关联式容器(二)
1.unordered_mapunordered_map不同于map的地方如它的前缀名一样,它是无序的,这是由于它的底层是由哈希表实现的。1.1 unordered_map的使用#include<iostream>#include<unordered_map>int main(){ std::unordered_map<int,int> um...原创 2020-02-14 14:57:22 · 99 阅读 · 0 评论 -
[STL:]关联式容器(一)
1.什么是关联式容器类似于vector,list,deque,等我们称之为序列式容器,它的底层是线性结构,存放的是数值本身,而关联式容器存放的是key-value键值对。键值对:用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值, value表示与key对应的信息。2.mapmap是最常用的关联式容器之一,它会按照key来比较顺序存储元...原创 2020-02-13 18:17:26 · 287 阅读 · 0 评论 -
[C++:]类型转换
1.static_caststatic_cast用于非多态类型转换(静态转换),编译器隐式执行的任何类型转换都可用static_cast,但它不能用于两个不相关类型的转换。例如如下demo:#include<iostream>int main(){ double i = 3.14; int a = static_cast<int>(i); ...原创 2020-02-13 16:39:58 · 112 阅读 · 0 评论 -
[C++]:智能指针
1.为什么需要智能指针?当我们写一个new语句时,一般就会立即把delete语句直接也写了,但是我们不能避免程序还未执行到delete时就跳转了或者在函数中没有执行到最后的delete语句就返回了,如果我们不在每一个可能跳转或者返回的语句前释放资源,就会造成内存泄露。使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类,当超出了类的作用域是,类会自动调用析构函数,析构函数会自动释放资...原创 2020-02-12 19:21:57 · 120 阅读 · 0 评论 -
[C++]: 多态
1.多态的条件虚函数通过指针或者引用访问a原创 2020-02-07 16:54:02 · 97 阅读 · 0 评论 -
[C++] :继承
1.继承权限问题先来看这样一个demo#include<iostream>class Person {public: Person() :_a(1), _b(2), _c(3) { std::cout << _c << std::endl; } int _a;protected: int _b;private: int _c;...原创 2019-11-26 22:05:17 · 103 阅读 · 0 评论 -
[STL]:容器适配器
C++提供了三种容器适配器(container adapter):stack,queue和priority_queue。stack和queue基于deque实现,priority_queue基于vector实现。那么如何理解容器适配器?本质上讲,它也是一种设计模式,我们可以把容器适配器想象成一个220v充电器,stack或者queue就是插座,我们可以根据不同的特性来转换(5v/10v)1....原创 2019-10-15 23:31:21 · 127 阅读 · 0 评论 -
[C++]: c++入门语法篇
1.引用引用不是重新定义一个变量,而是为变量取了一个别名,且不重新开辟空间,与引用的实体共享一块空间。引用的特性:定义时必须初始化,一个变量可以有多个引用,但是一个引用只能引用一个实体。//int &ra 就会编译出错(未初始化)引用的用法:int a = 10; int &ra = a;即类型 &引用对象名 = 引用实体常引用:const 类型...原创 2019-07-30 18:10:57 · 118 阅读 · 0 评论 -
[C++]:类与对象(一)
一.类的定义定义和声明全在类内class Date{ public: void showInfo(){} private: int _day; int _month;};声明在头文件,定义在.cpp文件之中//date.h文件class Date{ public: void showInfo(); private: ...原创 2019-08-01 18:02:52 · 141 阅读 · 0 评论 -
[C++]:类与对象(三)
一.构造函数的初始化列表class Date{public: Date(int year, int month ,int day) :_year(year), _month(month), _day(day) {}private: int _year; int _month; int _day;};如上例,初始化列表以一个冒号开始,逗号分隔数据成员,每个成员变量...原创 2019-08-26 15:21:00 · 111 阅读 · 0 评论 -
[c++]: 动态内存管理
一.c语言中malloc/calloc/realloc的区别我们来看一下以下demo:int main(){ int *p1 = (int*)malloc(sizeof(int)); free(p1); int *p2 = (int*)calloc(4, sizeof(int)); //free(p2); cout << &p2 << endl; ...原创 2019-08-28 16:56:30 · 129 阅读 · 0 评论 -
[STL]: 模拟实现String类
string类是什么string是表示字符串的字符串类该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator> string;不能操作多字节或者变长字符的序列。string类的接口实...原创 2019-09-04 10:42:25 · 227 阅读 · 0 评论 -
[STL]: 模拟实现vector
1.vector的介绍与使用接口1.1 vector是什么vector是一种序列式容器其底层实现原理和数组一样,但不同的是,它的大小可动态改变与其他序列式容器相比vector的随机访问使访问效率更加高效(O(1))1.2 iterator的使用//vector的使用#include<vector>int main(){ vector<int> vt...原创 2019-09-07 16:16:50 · 126 阅读 · 0 评论 -
[STL]:模拟实现List
1.List的介绍及使用接口1.1 List是什么List是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代,List的底层是双向链表结构。1.2 iterator的使用如下demo,我们分别用正向迭代器和反向迭代器访问List元素int main(){ int array[] = { 1,2,3,4 }; list<int>l1(arr...原创 2019-10-07 00:20:32 · 122 阅读 · 0 评论 -
[C++]:类与对象(二)
1.构造函数名字与类名相同,创建类类型时编译器自动调用无返回值可以重载本质不是开辟空间创建对象,而是初始化对象如果未定义构造函数,编译器会自动生成默认的构造函数 class Date { public: Date() {} //无参构造 Date(int year, int month, int day) //带参构造 { _year = year; ...原创 2019-08-02 17:50:29 · 180 阅读 · 0 评论