自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 资源 (1)
  • 收藏
  • 关注

原创 C++advanced, type decay and std::decay(10)

【代码】C++advanced, type decay and std::decay(10)

2023-12-02 08:28:32 149

原创 c++ advanced(8) std::variant from beginner to expert

std::variant(c17)在2004年boost 1.31.0库引入了variant,但是直到16年std::variant正式被引入标准库c++17

2022-04-15 12:59:14 861 2

原创 线段树及经典习题

线段树(Segment Tree)首先我们知道二叉树,balanced 二叉树可以保证查找的复杂度是logn的复杂度。理解起来十分直观:大概这样子:如你所见,底层的就是单个的元素,每往上走一层,就会根据底层的元素做一个范围查询(rangeQuery)操作,这个操作可以是求和,求最小,求最大,同时上一层就会cover all the union of the children's rangethere are four operations in total:build(start,e

2022-04-04 04:36:15 996 1

原创 c++ advanced(7)best example to understand CRTP

2022-04-03 15:07:44 1061 1

原创 c++ advanced (6) more about SFINAE

SFINAE in value space expressionclassify by assignment operatorclassify by static_cast operatorclassify by dynamic_cast operatorclassify by constructingoperatorclassify by no_except constructingoperatorconditional_tenable_ifexmaplestype

2022-03-10 11:02:35 1290

原创 C++ advanced (5)declval,lock-free/memory_order/atomic

std::declval(C++11)很多人知道decltype但是不太了解这个函数,确实相对与decltype用得少一些,但是在泛型编程中威力无穷。头文件:#include <utility> 我们自己实现可以用以下代码:template <class T> typename add_rvalue_reference<T>::type declval() noexcept;代表返回的值是一个右值引用T&&,除非T是vo

2022-02-13 13:38:14 669

原创 C++ advanced(4)make function and SFINAE

make function and SFINAE

2022-01-14 16:07:06 503 3

原创 串之Ukkonen、Rabin_karp算法

先上个题力扣https://leetcode-cn.com/problems/longest-duplicate-substring/本题一共有两种解决方法,一种是二分+rabin-karp算法,还有就是后缀树,官方给出的答案看着一直都很难受,因此自己整理一下。字串的查找方式千千万,最常见的暴力匹配,高级一点的根据最大公共前后缀的KMP,基于坏字符查找的BM等等大家应该都不陌生,就不说了。rabin-karp算法c++的哈希表定义的时候,我们可以自定义一个哈希函数。其实这个算法的本质就是..

2021-12-26 09:14:03 624 2

原创 欧拉快速幂/欧几里得扩展算法/欧拉-费马降幂

欧拉快速幂/欧几里得扩展算法/欧拉-费马降幂

2021-12-08 03:20:48 717 3

原创 c++ advanced(3)smart_ptr &&assignment operation

前排提示:本文不适合初学者阅读目录赋值操作的注意事项链式反应考虑本身记得拷贝基类优先使用智能指针而不是newstd::unique_ptrstd::shared_ptrstd::weak_ptr结束语​

2021-11-23 08:21:31 1120

原创 c++ advanced (2) details about default member functions

前排提醒:本文不适合初学者观看更加详细地了解类类型的默认函数熟悉c艹的人知道, 如果我们声明一个类类型(class, struct,Union),即使什么都不写,编译器也会为你声明很多东西,比如我们下面的代码并不会报错:using namespace std;class nums {};int main(){ nums n1; nums n2(n1); nums n3; n3 = n1; n3.~nums(); nums n4=mov

2021-11-07 11:27:02 4540 12

原创 c++ advanced(1)substitution of define && constexpr

首先向侯先生致敬,向侯老师的钻研精神致敬,特别提示:此文并不适合初学者阅读尽量用 const,enum,inline替换#define如果对编译原理熟悉,应该知道什么是符号表,如果不懂,可以去翻翻。我们都知道#define在预编译阶段就会被处理(通常情况下),因此在程序编译过程中,如果出现错误,我们看到的报错往往是#define后面的内容,本身符号不会显示在错误提示栏中,这样很容易造成困惑。...

2021-10-30 10:25:20 2404 9

原创 c++20 新特性(1) inner_product

之所以开这一个板块,主要是为了区别c和c++,很多人学了很久c++,但是除了cout之外似乎什么都不懂,只有熟练掌握了这些新特性,才能成为一名合格的c++ programmer当然,一些常见的新特性,网上千篇一律,我就不赘述了,请读者自己去网上查阅,主要记录一些相对少见但是很有用的新特性。目录头文件:版本1:版本2头文件:#include <numeric>版本1:template <class InputIterator1, class Inp..

2021-10-24 07:01:44 2352

原创 Git保姆级学习笔记2.远程库及工作流

远程库创建先去github注册账号,过程略,然后选择新建然后下面随便选选微软爸爸真有钱,然后我们就能看到这一串url,我们就能在本地库上使用这一串url重命名每一次使用不可能都去粘一段这么长的玩意儿,用起来很麻烦,因此我们可以让本地库记住这一串url,就可以用我们熟悉的命名替代它。我们先随便找个地方创建一个本地库...

2021-10-10 08:51:26 250

原创 前缀树(字典树)及经典题

最近leetcode上出了很多字典树的题。所谓字典树大概就是这个样子:这种数据结构从顶部往下走,每个前缀有很多种不同的组合,这种应用在我们比如说网络上搜索东西的时候,自动补全用得多。...

2021-09-18 05:35:56 452

原创 Linux 进程监控与服务管理

进程监控ps指令有以下选项后缀 说明 -a 查看所有终端信息 -u 以用户形式显示所有进程信息 -x 显示后台运行的参数 当然也可以不加任何参数,一般直接加 -aux,BSD 风格格式为用户+进程id+cpu占用百分比+物理内存占用百分比+虚拟内存占用大小(kb)+实际内存占用百分比(kb)+终端信息+运行状态+启动时间+占用的cpu时间+进程名字/启动该进程的指令扔个运行状态表:过滤直接利用管道grep查看父...

2021-09-09 14:44:58 883 3

原创 linux下的用户 组 和文件

linux下一共有三套压缩和解压缩指令,它们分别是:序号 压缩 解压缩 特点 1 gzip gunzip 压缩文件,尾缀为*.gz 2 zip 3

2021-08-29 13:35:42 263

原创 三句话,让你玩转vim编辑器

这里列举出几种我们用得比较多的快捷方式供自己日后复习引言拷贝删除查找设置行号快速移动撤销引言总所周知,vi是linux操作系统下自带的文本编译工具。而vim又是vi的加强版。vim有三个模式,分别是:一般模式:一般我们输入vim XXX进入的模式就是一般模式 编辑模式:在一般模式下输入i或者a进入,输入esc退出到一般模式 命令模式:一般模式下输入

2021-08-23 07:05:16 217 1

原创 Linux 目录结构详解

/ 根目录,没什么好讲的,根结点/bin 目录 包括 /user/bin、/user/local/bin:存放经常使用的命令。/sbin(s表示super,表示管理员级别的指令),包含user/sbin user/local/sbin/home 存放普通用户的主目录,在linux系统中每一个用户都有一个自己的目录,一般该目录是以用户的账户命名。比如我的点进去就是这样子:/root 目录为系统管理员,也称作超级权限者的用户主目录。/lib 系统开机所需要的最基本的动态链接.

2021-08-22 09:19:51 310

原创 通用测试技术——软件测试模型

目录软件测试流程测试模型V模型W模型H模型X模型测试过程理念软件测试流程获取需求 编写测试计划:用什么工具测多久,预计提交多少缺陷 制定测试方案:一般与测试计划写在一起 开发与设计测试用例:在开发没有完成的时候就要开始编写 执行测试:唯一与开发有交汇的地方 提交缺陷报告:缺陷是啥 测试分析和评审:哪个模块多,缺陷严重程度,缺陷类型,修复是否及时,缺陷存活时长 提交总结报告:记录分析过程 准备下一版本测试测试模型V模型这个图比较重要,建议记

2021-08-09 06:37:05 172

原创 通用测试技术——软件生命周期模型概述

瀑布模型最早提出的开发的过程模型,这个图要求记住缺点:强调时间顺序的严格执行。前一阶段不完成,后阶段不开始。 将测试安排在编码之后,这样会导致无法找到错误,因为如果我们发现编码和需求冲突,无法确定是编码的问题还是需求的问题, 没有体现出测试贯穿软件生命周期的原则。 相反如果一开始就介入就能避免需求分析的问题到编码完成后才被发现; 不适用用户需求的变化优点:为项目提供按阶段划分的检查点 当前一阶段完成后只需要关注后续的阶段螺旋模型螺旋模型见过了快速原型的迭代的特征以..

2021-08-06 08:10:24 288

原创 做人要心里有b树

引言:很久以前学过的东西,今天突然想做个回顾总结,加深一下印象目录为什么MySQL用B+树查找方式有哪些为什么不用红黑树和哈希表为什么java里面hashmap是用红黑树如何改良结构才能索引呢?B树B树的分类为什么MySQL用B+树查找方式有哪些目录查找:类似索引 键查找:hash查找 遍历:暴力算法,但是一定能找到 二分:也就是b+树的基础算法 索引:数组,链表,红黑树,hash索引,B-树及B+树上面这些方法并不是相互独立的,只是对一些专有查

2021-08-05 14:35:10 206

原创 各种io输入,流,字符串

楼主刷了很多题,也参参加了很多面试和笔试,但是很多次都是因为io输入没搞好花费大量时间调试,最后无疾而终。下面对各种笔试的奇葩格式做一个处理总结,希望以后不要在这种问题上浪费大量时间。目录间隔空格输入数字已知数组长度间隔空格输入数字已知数组组数n,每组长度一致但是未知...

2021-07-29 11:31:08 191 4

原创 并查集模板

并查集刷题模板并查集定义需要实现操作经典题查找合并more challenge并查集定义相信大家都知道,但是刷题的时候往往需要手动实现一些功能,这些代码往往大同小异,很多刷题新手看到这些代码会一头雾水,楼主把自己的一些理解总结下来,供大家参考。并查集定义借用百度百科的定义:并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中。

2021-07-25 01:11:48 178 1

原创 有序数组二分查找最接近的值

问题给你一个有序数组,数组里面有正有负,有重复值,再给你扔一个target 数,求这个数组中最接近target的数的值。如果有多个返回一个即可。思路求lower_bound,也就是我们可以通过求第一个大于等于targetnum的值来获取。但是求得lower_bound之后不一定代表着最接近,因为可能比target小的数更接近target,因此最后来一个比较即可。代码最简单的直接调用APIint binaryfind(vector<int>& vec, const int t

2021-07-14 16:24:09 2213

原创 背包9讲——多重背包问题

多重背包问题经典题目基本思路转化为01背包经典题目有N种物品和体积容量为V的背包,第i件物品最多有Mi件可以用,每件消耗的空间是Ci,价值是Wi,求解将哪些物品放入背包会使得在可能的容量下获得最大价值;基本思路其实跟完全背包差不多,完全背包的基本解题思路是在可以选的情况下,遍历每一种选择方式然后不断更新最大值,这个无非就是在之前的选择基础上多了一个Mi的双重限制。对于第i种物品,有Mi+1种选择方式,因此如果我们用F[i][v]表示前i件物品在v的空间下的最大价值,那么我们有状态转移方程:F[i

2021-07-13 22:21:27 275

原创 背包9讲——完全背包问题及变种问题

完全背包问题经典题目基本思路复杂度优化时间复杂度01背包转化优化空间复杂度变种题目经典题目与01背包不同的是,我们可以将物体无限制放入,01背包是只允许放入一件件,其他条件同理,问在不超过背包体积的限制下,怎么使得背包内物体价值最大。基本思路当然我们可以用贪心算法,算出单位体积最大价值,再依次递减直到无法放入,但是如果我们用动态规划思路,同样我们需要给出状态转移方程。同样我们定义一个二维数组,下标分别记为i和v,则F[i][v]表示在前i件物品中体积为v是的最大价值。那么我们要求的就是放入所有物体

2021-07-01 12:43:28 302

原创 背包9讲——01背包问题及变种题目

01背包问题经典题目基本思路空间优化变种题目力扣上刷了快200道题了,动态规划的题也做了很多,但是发现自己始终不得其精髓,有些奇奇怪怪的题可以转化为动态规划问题,但是没有经过系统训练就是不知道,就算看到答案也是看不懂;网上类似的讲解很多很多,我这里只是总结其他人的观点,再融入自己见解,主要目的是对学习过程进行记录,而不是搞出一些新的知识点;欢迎各位能在我理解的基础上更进一步,总结出自己的学习方法和思路;经典题目有容量为n的容器。有很多种物体,第i件物品对应的体积和价值分别是Vi及Wi,每种物品仅有一

2021-06-28 22:03:43 596 2

原创 网络编程(3)——poll/epoll模型

pool/epollpoll了解poll函数开发流程epoll函数说明epoll开发流程触发模式思考反应堆poll了解poll函数介于select和epoll之间,用得少,只是简单了解 int poll(struct pllfd* fds, nfds_t nfds,int timeout) 函数说明:跟select相似,监控多路IO但是不能跨平台,委托内核监控可读可写,以及监控异常事件 参数选择: fds:传入传出参数,实际上是一个结构体数组 { i

2021-06-15 18:23:48 300 2

原创 网络编程(2)-select模型

这里写目录标题TCP状态转换图三次握手四次挥手TIME_WAIT如何出现的为什么要有2MSL:端口复用方法、函数简介使用:半关闭的概念和具体实现函数与close区别:长连接及心跳包概念心跳包select函数fd_set相关函数多路IO模型高并发服务器优化优缺点TCP状态转换图三次握手客户端:启动->connect函数->SYN_SEND状态,发送SYN信号>>>>>>>>>>>>>>>>&gt

2021-06-09 14:35:02 190 2

原创 10种常见排序算法(c++)

这里写目录标题总览选择排序总览先把这个表背下来每个排序算法的平均时间复杂度和空间复杂度最重要的:插排,堆排,归并,快排选择排序这是最简单也最没用的一种排序方式,因为时间复杂度非常高而且不稳定,基本在工程上用不上这个东西;...

2021-05-22 23:31:59 1466 2

原创 Git保姆级学习笔记1.基本概念及本地库使用

Git命令基本操作学习笔记1.初始化本地库初始化设置签名2 提交文件查看状态/提交文件查看操作记录3版本穿梭版本穿梭reset命令其他版本4 找回删除文件删除文件后恢复添加到暂存区的删除文件找回5比较文件6.文件分支基本概念1.初始化本地库初始化命令:git init效果:然后就会创建出一个.git隐藏文件,内部有以下文件注意:存放的是本地库相关的子目录文件,不要删除也不要胡乱修改设置签名签名包含用户名和email地址,主要用于区分不同开发人员身份,注意:这里设置的签名和远程库的账号密码没

2021-05-05 15:48:56 173

原创 浅显易懂红黑树旋转/手动实现旋转代码

红黑树性质1.不能有连在一起的红色节点2. 每个红色节点的子节点都是黑色3. 叶子结点都是黑色为了满足这些性质,最后就形成AVL,但是其实并不严格,就是说它的左右子树深度差可以大于1,但是正是因为这样,而让旋转更加容易,因此它的缓冲平衡机制就更容易实现。==但是其实考虑到在操作过程中还有一部上色操作,其实跟普通的...

2021-04-25 11:21:18 512

转载 网最短路径搜索,迪杰斯特拉(Dijkstra)弗洛伊德(Floyd)算法

最近刷leetcode,两周刷了接近80道题,勉强算是入门了,不过感觉一些除了一些基础算法手撸之外,一些复杂算法的应用在面试过程中也会让你说出来,因此还是记录一下免得忘了。对于这两个算法其实都已经有很多文章记载了,这里主要是对一些疑惑的地方写一些记录迪杰斯特拉算法(Dijkstra)void dijkstra(MGraph G, int v) { int dist[MAXSIZE]; //dist[i]:源点到点 i 的路径长度 int path[MAXSIZ

2021-04-23 16:58:50 114

原创 二叉树数常见笔试题汇总(遍历,最大深度,反向构造,共同祖先,对称判断,路经总和,序列化及反序列化操作) c++实现

二叉树1.二叉树结构体定义2.反序列化与序列化2.1 反序列化2.2 序列化2.3 层序遍历2.4 测试3. 遍历3.1 前序及测试3.2 中序及测试3.3 后序及测试4.反向构造4.1 由中序和前序反向构造4.2 由中序和后序反向构造1.二叉树结构体定义struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNod

2021-04-18 20:21:11 606

原创 自己实现STL中的链表及迭代器(头插尾插,三指针反转,递归反转,部分反转,分组反转,排序,二分查找) c++实现

list最近在刷力扣,网上也顺便看了比较多的各种视频和书籍,但是没有找到一个是比较满意的,大部分都是面对实现编程,根本没有封装成类,用c写和用c++写差距非常大。就算是用类实现功能也比较单一,而且没有迭代器,不尽满意。因此我自己写一个,以便自己以后时常查阅复习,后续打算更新其他数据结构比如散标,跳表,堆,树,图等的实现以及对应的一些常规操作和高级操作实现。d...

2021-04-13 20:12:35 236

原创 设计模式——领域规则类及其经典案例

领域规则类再特定领域中,某些变化虽然频繁,但是可以抽象为某种规则,这个时候只需要结合特定领域,将问题抽象为语法规则,从而给出改领域下的一般性解决方案。典型模式:interpreterinterpreter就这一种动机就不说了,跟上面一样。比如说我们想实现一个加减运算: string expstr = "a+b-c+d";我们可以提取出一种语法规则如下:首先我们写一个变量表达式类,先写一个接口class expression{public: virtual int interpr

2021-04-07 20:50:11 313

原创 设计模式——行为变化类及其经典案例

在组件构建过程中,组件行为的变化常常导致组件本身剧烈的变化,行为变化模式将组件的行为和组件本身进行解耦从而支持组件行为的变化,实现两者间的松耦合。典型模式:commandvisitorcommand(命令模式)在软件构建过程中,行为请求者和实现者通常是一种紧耦合的关系,但是某些场合比如需要对行为进行记录,撤销,重做等事务的时候,这种无法抵御变化的紧耦合是不合适的。command模式可以将请求封装成对象,从而可以用不同的请求对客户进行参数化,对请求排队或者记录,从而支持可撤销操作。#includ

2021-04-07 19:11:32 457

原创 设计模式——数据结构类及其经典案例

数据结构类设计模式常常有一些组件在内部具有特殊的数据结构,如果让用户程序依赖这些特定的结构,将极大地破坏组件的复用性。这个时候将这些特定数据结构封装在内部,在外部提供统一的接口来实现与特定结构无关的访问,是一种行之有效的解决方案。经典结构:compositeiteratorchain of responsibilitycomposite(组成模式)为了以树形结构表现出部分整体的关系,composite使得用户对单个对象和组合对象的使用具有一致性;#include<algorithm&g

2021-04-07 16:22:53 320

原创 设计模式——状态变化及其经典案例

状态变化类设计模式在组件构建过程中,某些对象的状态经常面临临时变化,如何对这些变化进行有效的管理,同时又维持高层模块的稳定,状态变化类设计模式为此问题提供了一种解决方案。经典模式:statemementostate (状态模式)动机:在软件构建过程中,某些对象状态发生改变,那么其行为也会发生改变,那么我们如何根据对象的状态透明地更改对象的行为,而不会为对象操作和状态转化之间引入紧耦合?上代码enum networkstate{ net_open, net_close, net_con

2021-04-06 19:29:07 231

TCP/IP卷一卷二学习笔记.docx

自己的学习笔记,上传一下以便在其他电脑上下载阅读

2021-04-26

空空如也

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

TA关注的人

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