自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 基于GO的云原生API网关Apinto网关系列文章(一)-部署

写文出发点最近在调研基于GO语言的开源网关,想找个性能不错,扩展性强,还有免费控制台的网关。然后在github上发现一个不错的项目,APINTO网关,项目首页是https://github.com/eolinker/apinto ,顺便点了个star最近他们把控制台2.0开源出来了,页面好看,操作方便,所以想写个使用系列记录一下~APINTO简介Apinto是一款高性能、可扩展、易维护的...

2023-03-22 15:10:37 535

原创 将博客搬至CSDN

asdasd

2020-04-01 22:37:56 159

原创 动态库的生成和使用、日志打印、内存泄漏检测

为什么使用动态库:比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。其中可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序EXE文件中,会产生一些问题:一个缺点是增加了应用程序的大小,它会占用更多的磁盘空间,程序运行时也会消耗较大的内存空间,造成系统...

2020-02-26 21:13:37 1347

原创 程序的内存四区、二级指针、条件编译

内存的四区模型ps:常量区在全局区中栈区和堆区#include <stdlib.h>#include <string.h>#include <stdio.h>//堆char *getMem(int num){ char *p1 = NULL; p1 = (char *)malloc(s...

2020-02-26 02:34:57 167

原创 图论 | 最短路径——dijkstra算法、Bellman-Ford单源最短路径算法

dijkstra单源最短路径算法前提:图中不能有负权边因为存在负权环的话就不存在最短路径复杂度 O(ElogV)// Dijkstra算法求最短路径template<typename Graph, typename Weight>class Dijkstra{private: Graph &G; // ...

2020-02-25 15:47:57 355

原创 图论 | 最小生成树——Prim算法和Kruskal算法

有权图表示边的类// 边template<typename Weight>class Edge{private: int a,b; // 边的两个端点 Weight weight; // 边的权值public: // 构造函数 Edge(int a, int b, Weight weight){ th...

2020-02-23 04:19:30 245

原创 图论基础 | 无权图、深搜、广搜、路径、图的表示等问题

图论Graph Theory图的分类根据边可以分成有向图和无向图无向图是一种特殊的有向图根据边的权值可以分成有权图和无权图简单图是不包含自环边和平行边的图图的表示及相邻结点迭代器邻接矩阵:适合稠密图邻接表:适合稀疏图邻接矩阵// 稠密图 - 邻接矩阵class DenseGraph{private: int n, m; /...

2020-02-21 01:12:00 207

原创 一种特别的树形结构 | 并查集

并查集主要解决连接问题并查集操作:find(i) 查找父亲结点isConnected(p,q) 查询是否相连,返回boolunionElements(p,q)合并两个结点普通版本:无路径压缩,无优化class UnionFind{ private: // 我们的第二版Union-Find, 使用一个数组构建一棵指向父节点的树 //...

2020-02-20 16:40:16 120 1

原创 二叉树 | 二叉搜索树

二叉搜索树二叉搜索树用来解决计算机中非常重要的基础问题——查找问题。二分查找法对于有序数列才能使用二分查找法。// 二分查找法,在有序数组arr中,查找target// 如果找到target,返回相应的索引index// 如果没有找到target,返回-1template<typename T>int binarySearch(T arr[ ], int...

2020-02-20 03:36:20 168

原创 堆 | 堆排序、优先队列

优先队列优先队列 :出队顺序与入队顺序无关;和优先级相关,是由堆实现的头文件是queue定义:priority_queue<Type, Container, Functional>Type 就是数据类型,Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vecto...

2020-02-19 20:10:01 125

原创 排序进阶 | O(nlogn)排序算法——归并排序、快速排序

快排和归并排序的思想都是分治归并排序整体而已,归并排序比插入排序更优但近乎有序的数组,归并排序还是比插入排序慢。以下是自顶向下的归并排序图片来自于https://www.cnblogs.com/nullzx/p/5968170.html// 将arr[l...mid]和arr[mid+1...r]两部分进行归并template<typename ...

2020-02-18 21:40:53 577

原创 排序基础 | O(n*n)排序算法——选择排序、插入排序、冒泡排序、希尔排序

主要介绍选择排序和插入排序。冒泡排序和希尔排序简单过过。另外希尔排序时间复杂度不能确定,要看d的取值所以排序算法中,只有冒泡排序、插入排序、基数排序、归并排序是稳定的,其它都不稳定。选择排序#include <iostream>#include <algorithm>using namespace std;void selectionSo...

2020-02-17 23:26:42 169

原创 C++设计模式 | 四种行为型模式——模版方法模式、策略模式、命令模式、观察者模式...

模版方法模式定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。AbstractClass(抽象类):在抽象类中定义了一系列基本操作,这些基本操作可以是具体的,也可以是抽象的,每一个基本操作对应算法的一个步骤,在其子类中可以重定义或实现这些步骤。同时,在抽象类中实现了一个模板方法(Temp...

2020-02-16 20:25:33 376

原创 C++设计模式 | 四种结构型模式——代理模式、外观模式、适配器模式、装饰模式...

结构型模式:让类和类进行组合,获得更大的结构。代理模式代理模式的定义: 为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。subject(抽象主题角色):真实主题与代理主题的共同接口。RealSubject(真实主题角色):定义了代理角色所代表的真实对象。...

2020-02-16 02:50:36 317

原创 C++设计模式 | 四种创建型模式——简单工厂模式、工厂方法模式、抽象工厂模式、单例模式...

简单工厂模式#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<string>using namespace std;//抽象水果class Fruit{public: virtual void shoName() = 0;};//苹果类class...

2020-02-15 05:56:32 283

原创 C++设计模式 | 概述及面向对象设计原则

概述设计模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。软件设计模式的种类:创建型(Creational)模式: 如何创建对象;结构型(Structural )模式: 如何实现类或对象的组合;行为型(Behavioral)模式: 类或对象怎样交互以及怎样分配职责。设计模式目前种类: GoF的23种 + “简单工厂模式” = 24种。学习设计模...

2020-02-14 21:44:36 283

原创 UML之用例图和类图

软件建模软件建模的作用是把源于现实世界的问题转化为计算机可以理解和实现的过程。软件建模的实现过程是从需求入手, 用模型表达分析设计过程, 最终将模型映射成软件实现.UML(1)UML(United Modeling Language, 统一建模语言): 是一种基于面向对象的可视化建模语言.(2)UML 采用了一组形象化的图形(如类图)符号作为...

2020-02-14 01:26:01 8500

原创 C++STL之算法 | 常用拷贝和替换算法、常用算数生成算法、常用集合算法

常用拷贝和替换算法/* copy算法 将容器内指定范围的元素拷贝到另一容器中 @param beg 容器开始迭代器 @param end 容器结束迭代器 @param dest 目标容器开始迭代器 @return 返回目标容器结束迭代器*/copy(iterator beg, iterator end, iterator des...

2020-02-12 03:39:51 123

原创 C++STL之算法 | 常用查找算法及常用排序算法

常用查找算法/* find算法 查找元素 @param beg 容器开始迭代器 @param end 容器结束迭代器 @param value 查找的元素 @return 返回查找元素的位置*/find(iterator beg, iterator end, value)/* adjacent_find算法 查找相邻重复元素...

2020-02-12 02:36:56 207

原创 C++STL之算法 | 概述及常用遍历算法

算法概述算法主要是由头文件<algorithm> <functional> <numeric>组成。<algorithm>是所有STL头文件中最大的一个,其中常用的功能涉及到比较,交换,查找,遍历,复制,修改,反转,排序,合并等...<numeric>体积很小,只包括在几个序列容器上进行的简单运算的模板函数.&lt...

2020-02-12 01:46:27 150

原创 C++STL之算法 | 函数对象

函数对象的概念重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象,也叫仿函数(functor),其实就是重载“()”操作符,使得类对象可以像函数那样调用。注意:1.函数对象(仿函数)是一个类,不是一个函数。2.函数对象(仿函数)重载了”() ”操作符使得它可以像函数一样调用。假定某个类有一个重载的operator()...

2020-02-11 21:35:20 154

原创 C++STL | 容器元素浅拷贝深拷贝问题及容器共性和使用场景

STL容器共性机制STL容器所提供的都是值(value)寓意,而非引用(reference)寓意,也就是说当我们给容器中插入元素的时候,容器内部实施了拷贝动作,将我们要插入的元素再另行拷贝一份放入到容器中,而不是将原数据元素直接放进容器中。也就是说我们提供的元素必须能够被拷贝。*除了queue和stack之外,每个容器都提供可返回迭代器的函数,运用返回的迭代器就可以访问元素。...

2020-02-10 22:01:40 862

原创 C++STL | map/multimap容器和对组pair

map/multimap特性map相对于set区别,map具有键值和实值,所有元素根据键值自动排序。pair的第一元素被称为键值,第二元素被称为实值。map也是以红黑树为底层实现机制。我们通过map的迭代器可以修改map的键值吗?答案是否定的,键值关系到容器内元素的排列规则,任意改变键值会破坏容器的排列规则,但是你可以改变实值。map和multimap区别在于,map不允许...

2020-02-10 21:08:14 392

原创 C++STL | set/multiset容器

set/multiset特性set/multiset的特性是所有元素会根据元素的值自动进行排序。set是以RB-tree(红黑树,平衡二叉树的一种)为底层机制,其查找效率非常好。set容器中不允许重复元素。multiset允许重复元素。set不是随机存取不能使用[],只能通过迭代器我们可以通过set的迭代器改变元素的值吗?答: 不行,因为set集合是根据元素值进行排序,...

2020-02-10 18:15:44 256

原创 C++STL | list容器

特性链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链 表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。List示意图List示意图特性总结:采用动态存储分配,不会造成内存浪费和溢出...

2020-02-10 00:36:42 95

原创 C++STL | stack和queue

stackstack是一种先进后出(first in last out,FILO)的数据结构,它只有一个出口,stack只允许在栈顶新增元素,移除元素,获得顶端元素,但是除了顶端之外,其他地方不允许存取元素,只有栈顶元素可以被外界使用,也就是说stack不具有遍历行为,没有迭代器。特性总结:栈不能遍历,不支持随机存取,只能通过top从栈顶获取和删除元素.stack常用API...

2020-02-09 22:16:56 90

原创 C++STL | deque容器

deque特性deque(双端数组)是“double-ended queue”的缩写,和vector一样,deque也支持随机存取。vector是单向开口的连续性空间,deque则是一种双向开口的连续性空间,所谓双向开口,意思是可以在头尾两端分别做元素的插入和删除操作,vector当然也可以在头尾两端进行插入和删除操作,但是头部插入和删除操作效率奇差,无法被接受。deque和v...

2020-02-09 21:22:22 113

原创 C++STL | vector容器

vector特性vector容器是一个长度动态改变的动态数组,既然也是数组,那么其内存是一段连续的内存,具有数组的随机存取的优点。vector容器特性总结:vector是动态数组,连续内存空间,具有随机存取效率高的优点。vector是单口容器,在队尾插入和删除元素效率高,在指定位置插入会导致数据元素移动,效率低。vector如何实现动态增长?当vecto...

2020-02-09 00:43:36 76

原创 C++STL | string容器

string的特性Char*是一个指针,String 是一个类string 封装了 char,管理这个字符串,是一个 char型的容器。String 封装了很多实用的成员方法查找 find,拷贝 copy,删除 delete 替换 replace,插入 insert不用考虑内存释放和越界string 管理 char*所分配的内存。每一次 string 的复制,取值都由 ...

2020-02-08 21:58:31 76

原创 C++STL | 理论基础

基本概念STL(Standard Template Library,标准模板库)从广义上分为: 容器(container) 算法(algorithm) 迭代器(iterator),容器和算法之间通过迭代器进行无缝连接。STL几乎所有的代码都采用了模板类或者模板函数,这相比传统的由函数和类组成的库来说提供了更好的代码重用机会。在c++标准中,STL被组织成以下13个头文件:&l...

2020-02-08 20:43:40 81

原创 C++进阶 | 输入输出流

I/O流的概念程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件。C++输入输出包含以下三个方面的内容:对系统指定的标准设备的输入和输出。即从键盘输入数据,输出到显示器屏 幕。这种输入输出称为标准的输入输出,简称标准I/O。以外存磁盘文件为对象进行输入和输出,即从磁盘文件输入数据,数据输出 到磁盘文件。以外存文件为对象的输入输出称为文件的...

2020-02-08 02:05:07 229

原创 C++进阶 | 异常

定义:异常是一种程序控制机制,与函数机制独立和互补异常设计目的: 栈机制是一种高度节律性控制机制,面向对象编程却要求对象之间有方向、有目的的控制传动,从一开始,异常就是冲着改变程序控制结构,以适应面向对象程序更有效地工作这个主题,而不是仅为了进行错误处理。异常设计出来之后,却发现在错误处理方面获得了最大的好处。异常的错误处理机制:1)C++的异常处理机制使得异常的引发和异常...

2020-02-07 03:21:17 141

原创 C++进阶 | 类型转换

C风格的强制类型转换Type b=(Type) ac 风格的类型转换有不少的缺点,有的时候用 c 风格 的转换是不合 适的,因为它可以在任意类型之间转换,比如你可以把一个指向 const 对象的指针转换 成指向非 const 对象的指针,把一个指向基类对象的指针 转换成指向一个派生类对象的 指针,这两种转换之间的差别是巨大的,但是传统 的 c 语言风格的类型转换没有区分这 些...

2020-02-06 21:44:55 121

原创 C++进阶 | 模版

模版分成函数模版和类模版模板的精神其实很简单:参数化类型。 换句话说, 把一个原本特定于某个类型的算法或类当中的类型信息抽掉,抽出来 做成模板参数 T。函数模版所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不 具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。语法格式:template<typename T>template<...

2020-02-06 18:36:07 102

原创 C++基础 | 多态

多态多态性是面向对象程序设计的一个重要特征,能增加程序的灵活性。可以减轻 系统 升级,维护,调试的工作量和复杂度.多态的定义C++中所谓的多态(polymorphism)是指,由继承而产生的相关的不同的类,其对象 对同一消息会作出不同的响应。多态的三个必要条件:1.要有继承2.要有虚函数重写3.父类指针或引用指向子类对象在基类的要调用的方法前加个virtual,而且...

2020-02-05 02:11:30 201

原创 C++基础 | 继承和派生

耦合度,高内聚,低耦合程序设计追求高内聚,低耦合高内聚指一个函数干的事情极少,甚至只干一件事情低耦合是类之间的关系越少越好继承继承的耦合度很高,但是方便不用写太多代码在 C++中可重用性(software reusability)是通过继承(inheritance)这一机制来 实现的。定义:类的继承,是新的类从已有类那里得到已有的特性。或从已有类产生新类 的过程就是...

2020-02-03 00:37:40 122

原创 C++基础 | 类和对象----友元和重载

友元友元的作用是提高了程 序的运行效率(即减少了类型检查和安全性检查等都需要时间开销),但它破坏了类的封装 性和隐藏性,使得非成员函 数可以访问类的私有成员。友元函数是可以直接访问类的私有成员的非成员函数。需要在类的定义中加以声明,声明时只需在友元 的名称前加上 关键字 friend即可以全局函数作友元函数,也可以类成员函数作友元函数全局函数作友元函数:class Poi...

2020-02-02 01:41:06 248

原创 C++基础 | 类和对象

类class Circle{private: double radius ; //成员变量 public : //类的访问控制 void Set_Radius( double r ) { radius = r; } //成员函数 do...

2020-01-30 06:39:38 128

原创 C++基础 | C++对C语言的拓展

引用引用相当于常指针如 int &a和int* const a引用的规则1 引用没有定义,是一种关系型声明。声明它和原有某一变量(实体)的关系。故而类型与原类型保持一致,且不分配内存。与被引用的变量有相同的地 址。2 声明的时候必须初始化,一经声明,不可变更。3 可对引用,再次引用。多次引用的结果,是某一变量具有多个别名。4 &符号前有数据类型时,是引...

2020-01-28 01:35:34 135

原创 C++基础 | C++对C语言的增强

namespace命名空间C++中的命名空间:命名空间将全局作用域分成不同的部分不同命名空间中的标识符可以同名而不会发生冲突命名空间可以相互嵌套全局作用域也叫默认命名空间C++命名空间的定义:namespace name{...}C++命名空间的使用:使用整个命名空间:using namespace name;使用命名空间中的变量:using na...

2020-01-27 01:14:32 113

空空如也

空空如也

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

TA关注的人

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