自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ProtoBuf详解(一)概念和语法

关于ProtoBufProtoBuf 是谷歌开源的一套与语言无关,平台无关,可扩展性强,兼容性好并且效率很高的数据序列化方法,非常适合用于做二进制数据的通信协议和数据存储。这里可以访问官方文档。很多人都喜欢将 ProtoBuf 和 XML 和 JSON 这两个常用于网络通信和数据交换的格式做比较,但我觉得这并不合适,因为完全就是两个侧重点。首先 ProtoBuf 的突出点是在二进制序列化方面,而另外两者都是突出字符串文本的可读性上,其效率当然是 ProtoBuf 快的不是一点,其次 ProtoBuf

2021-08-15 23:51:23 3015

原创 深入实践C++11智能指针

智能指针概念C/C++ 语言最为人所诟病的特性之一就是存在内存泄露问题,因此后来的大多数语言都提供了内置内存分配与释放功能,有的甚至干脆对语言的使用者屏蔽了内存指针这一概念。这里不置贬褒,手动分配内存与手动释放内存有利也有弊,自动分配内存和自动释放内存亦如此,这是两种不同的设计哲学。有人认为,内存如此重要的东西怎么能放心交给用户去管理呢?而另外一些人则认为,内存如此重要的东西怎么能放心交给系统去管理呢?在 C/C++ 语言中,内存泄露的问题一直困扰着广大的开发者,因此各类库和工具的一直在努力尝试各种方法去

2021-08-15 23:19:50 9276 12

转载 图的最短路径之Floyd算法

参考:https://wangkuiwu.github.io/2013/04/15/floyd-cplusFloyd算法介绍弗洛伊德 Floyd 算法和 Dijkstra 算法一样,也是用于寻找给定的加权图中顶点间的最短路径算法。该算法名称以创始人——1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。算法思想:通过 Floyd 计算图 G=(V, E) 中各个顶点的最短路径时,需要引入一个矩阵 S,矩阵 S 中的元素 a[i][j] 表示顶点 i(第 i 个顶点)到顶点 j(第

2021-08-13 22:41:09 468 1

转载 图的最短路径之Dijkstra算法

参考:https://wangkuiwu.github.io/2013/04/14/dijkstra-cplusDijkstra算法介绍迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。算法基本思想:通过 Dijkstra 计算图 G 中的最短路径时,需要指定起点 s(即从顶点 s 开始计算)。此外,还需要引进两个集合 S 和 U。S 的作用是记录已求出最短路径的顶点(以及

2021-08-08 21:19:46 672

转载 图的最小生成树之Kruskal算法

参考:https://wangkuiwu.github.io/2013/04/12/kruskal-cplusKruskal算法介绍克鲁斯卡尔(Kruskal)算法,和普利姆(Prim)算法类似,也是用来求加权连通图的最小生成树的算法。关于最小生成树的概念,已经在之前的图的最小生成树之Prim算法篇首介绍过。Kruskal 与 Prim 算法思想出发点不同,Prim 算法是以顶点出发的,而 Kruskal 算法是以边出发的。其算法思想是:按照权值从小到大的顺序选择 n-1 条边,并保证这 n-1 条

2021-08-08 21:06:16 896 1

转载 图的最小生成树之Prim算法

参考:https://wangkuiwu.github.io/2013/04/13/prim-cplusPrim算法介绍在介绍普里姆 Prim 算法前,首先需要知道 Prim 算法的作用。Prim 算法是用来求加权连通图的最小生成树的算法。下面先介绍最小生成树。最小生成树概念在含有 n 个顶点的连通图中选择 n -1 条边,构成一棵极小连通子图,并使该连通子图中 n -1 条边上权值之和达到最小,则称其为连通图的最小生成树。图 G4如上连通图 G4 所示,可以有多棵权值总和不相同的生成树。情

2021-08-08 20:51:53 1346

转载 图的拓扑排序

参考:https://wangkuiwu.github.io/2013/04/11/topsort-cplus拓扑排序介绍拓扑排序(Topological Order)是指,将一个有向无环图(Directed Acyclic Graph,简称 DAG)进行排序而得到一个有序的线性序列。比如:有这样一种情景,一个项目包括 A、B、C、D 四个部分来完成,并且 A 依赖于 B 和 D,C 依赖于 D。现在要制定一个计划,写出 A、B、C、D 的执行顺序。这时候,就需要用到拓扑排序,他就是用来确定事物的发生

2021-08-08 20:36:10 1096

转载 图的遍历之DFS与BFS

参考:https://wangkuiwu.github.io/2013/04/10/iterator深度优先搜索DFS图的深度优先遍历(Depth First Search)和树的先序遍历有一定相似之处,它的基本思想是:假设初始状态是图中所有顶点均未被访问,则从某个顶点 v 出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和 v 有路径相通的顶点都被访问到。 若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问

2021-08-08 20:23:25 272

转载 C++11的Lambda函数

Lambad函数概念参考:《深入理解C++11:新特性解析与应用》C++11 中新增了 Lambda 匿名函数,其基本格式如下:[捕捉列表] (参数) mutable -> 返回值类型 {函数体}参数说明:[] 是 Lambda 的引出符,捕捉列表能够捕捉上下文中的变量,来供 Lambda 函数使用,变量捕捉规则如下:[var] 表示以值传递方式捕捉变量 var[=] 表示值传递捕捉所有父作用域变量[&var] 表示以引用传递方式捕捉变量 var[&] 表示引

2021-08-02 00:41:00 704

原创 STL萃取(Traits)机制

问题前述我们希望有一个类,并有一个成员方法 GetSum 可以完成数组元素的一系列运算。具体看如下代码:#include <iostream>using namespace std;//处理int类型class IntArray{public: IntArray() { a = new int[10]; for (int i = 0; i < 10; ++i) { a[i] = i +

2021-08-02 00:26:13 1043

原创 字符串匹配之BF与KMP算法

字符串模式匹配字符串模式匹配的描述:有两个字符串 T 和 p,若打开在串 T 中查找是否有与串 p 相等的的字串,称串 T 为目标串,串 p 为模式串,并称查找模式串 p 在目标串的匹配位置的运算为模式匹配。比如有如下两个字符串:目标串T: abaabcac模式串p: ab我们可以看到,模式串 p 的匹配结果会出现两次,分别是从 T[0] 和 T[3] 开始。字符串匹配是一项非常频繁的任务。例如,有一份名单,你急切地想知道自己在不在名单上;又如,假设你拿到了一份文献,你希望快速的找到某个关键字

2021-08-01 19:27:00 629

空空如也

空空如也

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

TA关注的人

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