自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Boost文档搜索引擎(简陋的) -- 基于jieba分词和HTTP协议

Boost文档搜索引擎前言项目效果以及GitHub链接整体结构预处理模块枚举路径解析文件索引模块创建正排索引创建倒排索引查询正排/倒排索引搜索模块搜索函数服务器模块前言为了更方便的使用Boost库,于是想到实现一个基于Boost离线文档的搜索引擎,对离线的HTML文件进行分析,、并对查询词进行分词(借用第三方库),然后根据相关性(简陋的相关性公式)进行排序,最终将查询结果用JSON的数据格式进行组织打包,最终通过对外的http服务将查询结果返回项目效果以及GitHub链接由于不怎么会前端的一些语法

2020-08-26 15:40:58 462

原创 C++11中的新特性

C++11列表初始化变量类型推导final与override默认成员函数控制右值引用lambda表达式捕捉列表线程库原子性操作库(atomic)mutexlock_guardunique_lock多线程安全异常概念异常的使用标准库中的异常体系异常的优缺点列表初始化C++11:支持内置类型与自定义类型的列表初始化,其中自定义类型不是天然支持列表初始化,需要显示定义参数类型为initiaizer_list的构造函数class A{public: A (int a, int b) : _a(

2020-07-27 16:38:18 197

原创 位图、布隆过滤器与大数据处理

位图每一个比特位来表示当前比特位对应的数据是否存在,存在为1,不存在为0整数数组:整数位置:n/32整数位置中具体的bit位置:n%32右移相当于除,右移n位 == 数字➗2n位图实现:哈希表实现:整数数组数据单元是bit位节省空间,一个字节可以存放8个整数的二值信息(存在与否),不存放数据本身操作效率高,通过哈希映射获取位置,通过位运算执行操作, 时间效率O(1)位置映射:获取整数位置,n / 32获取整数的比特位:n % 32位图需要的空间大小和数据的范围有关

2020-07-20 09:35:01 177

原创 从无序关联容器到哈希(及无序号关联容器的模拟实现)

从无序关联容器到哈希无序关联容器unordered_mapunordered_set和有序容器的区别底层结构:哈希结构哈希冲突unordered_map与unordered_set的模拟实现哈希表迭代器unordered_setunordered_map具体代码实现无序关联容器unordered_map基本使用与map相同,迭代器无反向迭代器,无序map,其体现在遍历时无序#include <unordered_map>void testUMap(){ unordered_map

2020-07-19 20:08:40 208

原创 map和set的模拟实现

改造红黑树关联式容器存储的是K, V键值对,故在改造红黑树时,K为key类型,对于V来说,如果是set,则其为K类型,如果是map则为pair<K, V>,类型,除此之外,还需要一个仿函数类KeyOfValue来兼容map与set的大小比较,其迭代器也需要封装指针为一个类,迭代器的自加自减相当于红黑树的中序遍历template <class V>struct RBTIterator{ typedef RBNode<V> Node; typedef RBTIte

2020-07-17 22:38:49 107

原创 从AVL树到红黑树(的插入)

从AVL树到红黑树AVL树节点结构插入左旋右旋红黑树节点结构插入AVL树左右子树都是AVL树左右子树高度差的绝对值不超过1(-1/0/1)(一般:右子树高度 - 左子树高度)如果一棵二叉搜索树树高度平衡的,它就是AVL树。如果它有n个节点,其高度可保持在O(log2N),搜索时间复杂度O(log2N)节点结构template <class T>struct AVLNode{ T _value; int _bf;//平衡因子 AVLNode<T>* _left

2020-07-12 17:56:00 191

原创 set以及map的应用总结及特性

set以及mapset基本使用与遍历插入删除查找map基本使用以及遍历插入删除查找multiset和multimapset实现—>目前使用搜索树实现(红黑树)底层是一个存放KV结构的搜索树,但是此处K、V相同set中只需要存放valueset中不能存放重复的元素set中的元素不能修改,不支持修改的操作set默认比较是小于,可以通过修改仿函数,修改比较逻辑迭代器遍历有序:底层顺序是二叉搜索树的中序遍历迭代器只能读取内容,不能修改内容插入:如果用迭代器指定插入位置,最终实际的插入位置

2020-07-12 17:00:40 127

原创 二叉搜索树的简单实现

二叉搜索树若左子树非空,则左子树上所有节点的值都小于根节点的值若右子树非空,则右子树上所有节点的值都小根节点的值左右子树也是二叉搜索树上述条件反之亦可查找接近二分查找,最大查找次数为树的高度,平均查找次数Log2 Ntemplate <class T>struct BSTNode{ T _val; BSTNode<T>* _left; BSTNode<T>* _right; BSTNode(const T& val

2020-07-04 18:34:00 71

原创 (C++)多态的基本使用及原理

多态多态的概念、定义以及实现抽象类多态原理虚函数表继承下的虚表多态的概念、定义以及实现多种形态,当不同的对象去执行同一种行为时,产生的不同表现形态构成条件:在不同的继承关系的类对象,去调用同一函数,产生了不同的行为继承关系必须通过基类的指针或者引用调用的虚函数,一般都是用父类指针/引用指向父类以及子类实体,即都为切片行为被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写必须同时满足以上条件,缺一不可虚函数的重写:重写函数逻辑构成虚函数重写条件:子类含有和父类接口完全相同的

2020-06-28 17:29:39 123

原创 C++中的继承

继承概念类级别的代码复用继承方式:public、protected、privateprotectde访问权限/private访问权限:protected —> 在当前类和子类中可见,在其他地方不可见private —> 在当前类中可见,在其他地方不可见父类成员在子类中的访问权限:min { 成员在父类中的原始访问权限,继承方式 }一般都是public继承,protected/private继承很少使用/几乎不用默认继承方式:class定义的类默认继承方式是privat

2020-06-26 15:47:50 118

原创 stack、queue及priority_queue

stack、queue及priority_queuestack的基本使用queue的基本使用priority_queue仿函数容器适配器duque 双端队列模拟实现stack的基本使用#include<stack>stack<int> st;st.push(1);st.push(2);st.push(3);while(!st.empty()){ cout << st.top() << " "; st.pop();}cout <

2020-06-17 13:56:55 153

原创 list的基本使用以及模拟实现

文章目录list的基本使用list迭代器list与vector的差异list的模拟实现list的基本使用本质为双向带头循环列表list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向带头循环链表,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。与其他序列式容器相比,list和

2020-06-15 00:54:06 215

原创 vector的基本使用及实现方式

vector的使用以及实现方式vector的基本使用vector的遍历vector容量vector修改操作vector的实现vector的基本使用vector<int> v;vector<char> v2;vector<string> v3;vector<int> v4(10, 5);//10个5string s2 = "0123456789";vector<char> v5(s2.begin(), s2.end());vec

2020-06-11 11:30:00 254

原创 string类的基本使用以及常用接口

string类的基本使用以及常用接口string类基本使用迭代器capacity等接口遍历操作string类对象的修改操作string常用接口string类基本使用#include <string>void test(){ string str;//"" string str2("123");//"123" string str3 = "abc";//"abc" string str4("0123456789", 5);//"01234" string cpy(st

2020-06-07 20:39:21 266

原创 (C++)初识模板

模板初阶泛型编程函数模版模版参数的匹配规则类模版泛型编程编写与类型无关的代码template <typename / class 泛型参数1, typename / class 泛型参数2 ...... >告诉编译器一个模板,让编译器根据不同的类型利用该模板生成代码函数模版template <class T>void Swap(T& left, T& right){ T tmp = left; left = right; right =

2020-05-31 14:59:34 125

原创 C++中基本的内存管理

C++中的内存管理C/C++内存分布C语言中内存管理方式C++内存管理new / delete 操作内置类型new / delete操作自定义类型operator new 与 operator delete函数operator new 与 operator delete的类专属重载new / delete 原理C/C++内存分布栈:非静态局部变量,函数参数,返回值等,栈是向下增长的内存映射段:装载一个共享的动态内存库堆:用于程序运行时动态内存分配,可以向上增长数据段:存储全局变量和静态数据代码

2020-05-30 19:32:33 98

原创 (C++)static、友元、内部类

static、友元、内部类再谈构造函数static 成员友元友元函数友元类内部类总结再谈构造函数初始化列表::成员(初始化/表达式),成员2()…每个成员变量只能在初始化列表中出现一次对象成员必须在定义时初始化的地方:初始化列表如果有引用成员、const成员、没有默认构造的自定义成员,必须在初始化列表中进行初始化其他成员可以不进行显示初始化class Time{public: Time(int a) { _a = a; }private: int _a;};c

2020-05-27 12:26:44 195

原创 (C++)类的六大默认成员函数

六大默认成员函数类的 6 个默认成员函数构造函数析构函数拷贝构造函数运算符重载普通运算符重载函数赋值运算符重载函数const成员取地址及const取地址操作符重载总结类的 6 个默认成员函数初始化和清理:构造函数主要完成初始化工作析构函数主要完成清理工作拷贝复制:拷贝构造是使用同类对象初始化创建对象复制重载主要是把一个对象赋值给另一个对象取地址重载:​ 主要是普通对象和const对象取地址,这两个很少会自己实现构造函数构造函数:函数名和类型名相同,无返回值,可以重载,编译器在

2020-05-24 14:43:59 320

原创 C++中的类与this指针

类与this指针类的定义类的限定符以及封装类的作用域:类的实例化:类对象模型(大小)this 指针类的定义C++ struct:可以定义数据以及函数,一般使用classstruct Student{ void display() { } void setId(int id) { _id = id } char name[10]; int _id;};class Student{//成员函数public://共有成员在任何地方可用 void di

2020-05-23 20:42:08 243

原创 C++基础语法

C++基础语法命名空间输入输出方式缺省参数函数重载函数重载如何实现的extern "C"引用内联函数auto基于范围的for循环指针空值nullptr命名空间对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的namespacs dog//命名空间为dog{ void print(int a) { printf(" %d \n", a); } int a; int b;//可定义变量,也可定义函数 namespac

2020-05-21 11:54:31 94

原创 数据结构中常见的排序

常见排序排序的概念插入排序直接插入排序希尔排序选择排序直接选择排序堆排序交换排序冒泡排序快速排序归并排序非比较排序排序的概念排序:使一串记录,按照其中某个或某些关键字的大小,递增或递减的排列起来的操作稳定性:假定在待排序的记录序列中,存在多个具有相同关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,arr[ i ]=arr[ j ,且]arr[ i ]在arr[ j ]之前,而在排序后的序列中,arr[ i ]仍然在arr[ j ]之前,则称这种排序算法是稳定的,反之则不稳定。内

2020-05-11 14:34:24 201

原创 二叉树与堆的概念以及实现

二叉树与堆树的概念二叉树二叉树的节点总数二叉树的存储形式堆堆的向下调整:堆的向上调整堆的实现二叉树的实现二叉树的遍历二叉树的构建二叉树的节点个数问题树的概念根没有父节点子树互不相交节点数 = 边数 + 1节点的度 = 子树的个数树的度:最大节点个数树的高度:最大层次树的表示:双亲表示法,孩子表示法,孩子兄弟表示法满二叉树:除过叶子,其他节点度都为二,并且每层都是满的完...

2020-04-28 09:43:12 194

原创 栈和队列

栈和队列栈C语言中栈的实现队列C语言中队列的实现栈栈是一种特殊的线性表,其只允许在固定的一端进行插入删除,进行数据的插入和删除操作的一段称为栈顶,而另一端称为栈底。栈之中的元素遵循后进先出的原则。压栈:栈的插入操作叫做进栈 / 压栈 / 入栈,入数据在栈顶。出栈:栈的删除操作叫出栈,出数据也在栈顶。C语言中栈的实现栈的实现一般可用数组或链表形式实现,相对而言,数组的结构更好一些,...

2020-04-12 13:08:09 80

原创 数据结构-顺序表和链表

顺序表和链表线性表顺序表顺序表的接口实现链表不带头单向非循环链表带头双向循环列表顺序表和链表各自的特点线性表线性表n个具有相同特性的数据元素的有限序列,它是一种在实际使用中广泛使用的数据结构,常见的线性表有顺序表、链表、栈、队列等。线性表在逻辑上是线性结构,但是在物理上不一定连续(比如链表)。顺序表顺序表是一段物理地址连续的存储单元依次存储数据元素的线性结构,一般用数组存储,在数组上完成数...

2020-04-07 11:45:52 129

原创 C语言实现一个简单的通讯录程序

C语言通讯录头文件通讯录main函数部分功能函数部分初始化以及菜单函数排序以及扩容部分增删查改联系人打印以及清空一个合格的通讯录,应该支持增、删、查、改这四个基本操作,同时,我在这个通讯录中也运用了内存的动态管理与文件操作的知识,同时这个通讯录可以支持按照联系人姓名进行排序。GitHub链接头文件#include<stdio.h>#include<string.h&gt...

2020-03-28 14:35:34 768

原创 C语言中的文件操作

C语言中的文件操作文件缓冲区文件的打开和关闭(fopen、fclose)字符输入/输出函数(fgetc/fputc)文本行输入/输出函数(fgets/fputs)格式化输入/输出函数(fscanf/fprintf)二进制输入/输出函数(fread/fwrite)小结文件文件一般存储在外存(硬盘、光盘、U盘等)当中,而非内存中,文件可以分为文本文件以及二进制文件,其中文本文件保存的内容是字符串...

2020-03-22 14:18:26 116

原创 (C语言)内存的动态管理

内存的动态管理内存的区域内存动态管理函数malloccallocreallocfree内存泄露内存的区域在计算机中,内存可以被粗略的划分成,代码段、数据段、堆区以及栈区,如下图所示栈区一般用于存放代码中定义的生命周期较短的局部变量,而堆区则是内存管理函数所开辟内存的对象内存动态管理函数malloccallocreallocfreemallocmalloc函数可以申请一块连...

2020-03-20 15:48:14 189

原创 C语言中的自定义类型(结构体、枚举及联合)

C语言中的自定义类型(结构体、枚举及联合)结构体结构体的声明结构体的成员访问结构体的内存对齐位段枚举联合结构体结构体是一些值的集合,这些值被称为成员变量,结构的每个成员可以是不同类型的变量。结构体的声明struct piont{ int x; int y;}p1;//声明结构体类型,同时定义变量p1struct point p2;//定义结构体变量p2struct poin...

2020-03-13 16:45:41 407

原创 一些库函数的模拟实现合辑(字符串+内存函数)

部分库函数的模拟实现(字符串+内存函数)strlen函数strcpy函数strcat函数strcmpstrstr函数memcpy函数memmove函数strlen函数strlen函数是用来求字符串长度的,且包含 ‘ \0 ’,它的参数是一个char* 类型的指针,返回值是一个int类型的整数#include<stdio.h>int My_strlen(const char* ...

2020-03-10 17:53:14 78

原创 C语言关于指针的几道面试题(烧脑预警)

C语言关于指针的面试题第一题第二题第三题第四题第五题第六题第七题最终题第一个输出第二个输出第三个输出第四个输出总结第一题#include<stdio.h>int main(){ int a[5] = { 1, 2, 3, 4, 5 }; int* ptr = (int*)(&a + 1); printf("%d,%d", *(a + 1), *(ptr -...

2020-03-06 18:23:26 1064

原创 C语言中对于数组strlen和sizeof的各种情况及分析

strlen和sizeof本身的区别szieof是一个运算操作符,在使用时无需声明头文件,它的参数可以是数据类型,数组,指针及函数等等strlen是一个库函数,在使用前需要声明string.h头文件,它的参数必须是字符型指针(char* )对于数组首先,数组和指针是两个不相干的概念,然而,C语言中很多情况下数组都能隐式转化为指针,指针也能当作数组一样使用(用[ ]来取下标)32位系统下,...

2020-03-03 15:44:30 903

原创 关于原码、反码及补码的一些总结

大小端字节序小端:数字的低位存到内存的低地址上。大端:数字的低位存到内存的高地址上。大端字节序符合平时直觉,一台机器大端还是小端,取决于CPUint a = 0x11223344低地址0x1000x1010x1020x103高地址低地址44332211小端低地址11223344大端原码反码与补码例如-10:1000 0000...

2020-02-27 12:11:09 323 1

原创 关于C语言中函数的一些认知

什么是函数?在C语言中,函数又可以被称为 “子程序”,它是一个大程序的某一个部分,由一个或多个语句块构成,负责完成某项特定任务,而且相较于其他代码,其具备相对独立性,可以用它来实现代码的模块化。函数的分类1.库函数诸如printf(打印),strcpy(字符串拷贝)等基础功能函数,在C语言中基础库中提供了一系列的库函数,在使用是仅需使用#include来包含对应的头文件即可(可配合查询工具...

2020-02-02 14:46:43 137

原创 一个简单的扫雷游戏(是真的简单)

首先我们需要分析扫雷游戏在微软的扫雷游戏中,开始游戏后,雷已经随机埋好,当鼠标点击一个待排查点,假如是雷,则游戏结束,假如不是雷,则会显示周围一圈格子中雷的数量。实际上游戏的机制非常简单,但需要实现,还是得仔细分析。需要两个数组(字符数组),一个用以存放雷的位置,一个用以向用户显示当前游戏状态,为了方便检测游戏中四条边的雷的数量,这里应将实际数组扩大一圈,比如游戏中看到的是8x8的格子,而在...

2020-01-01 17:03:20 311

原创 C语言实现三子棋游戏(也实现N子棋)

这是我作为一个初学者第一次尝试搞出来的东西,它不但可以实现三子棋游戏,通过修改#define的定义,还可以实现N子棋游戏。首先,分析该游戏需要的逻辑作为一个游戏,它首先需要有一个用户菜单,让用户选择开始或选择退出游戏,故需使用一个do while循环(需要在程序的一开始就显示菜单,并且在正常游戏流程结束时再次让玩家选择继续或者退出)来显示菜单并接收用户的输入,以此判断玩家是否玩游戏。在玩家...

2019-12-28 12:13:27 904 3

原创 12_8 关于关键字,函数以及指针的初步了解

关键字对于关键字这一方面,有以下几个需要我特别注意的关键字作用typedef类型定义,可理解为类型重命名static1.修饰局部变量改变其生命周期(作用域不变)2.修饰全局变量改变作用域,连接属性由外转内 3.修饰函数,同全局变量类似#define定义常量和宏函数在学习函数这一方面的时候,碰到了一些小问题,总会在声明函数之后加上一个分号,导致一些...

2019-12-08 16:03:42 85

原创 小白的自我修养

小白的自我修养新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入你好! 这是你第一次使用 Markdown编辑...

2019-12-06 23:02:07 89

空空如也

空空如也

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

TA关注的人

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