自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

年少轻狂,幸福时光

--事物的难度远远低于对事物的恐惧

原创 第七载:makefile中的条件判断

makefile跟编程语言一样,也支持条件判断,方式大同小异,makefile条件判断语句的语法如下: 虽然有集中形式,但是推荐使用第一种,其比较符合我们的编程习惯(尤其从事C/C++派系的工作人员),需要注意的是,ifxxx前边不能为tab键(因为不是命令),()中也不允许有空格,否则会报错,这...

2019-09-22 19:47:16

阅读数 38

评论数 0

原创 第六载:makefile变量的高级主题

在makefile中,我们已经知道变量的基本赋值方法、使用等,但是在makefile中,变量还有一些高级的属性,掌握这些属性,可以使编写的makefile更加高效,现在就来了解下makefile中变量的高级属性 一、变量值的替换 - makefile支持使用指定字符(串)替换变量值中的后缀...

2019-09-22 14:41:08

阅读数 12

评论数 0

原创 第五载:预定义变量的使用

在makefile中,存在一些预定义的变量,我们可以直接使用他们,预定义的变量可分为自动变量与特殊变量 1、 自动变量 $@ 表示目标 $^ 表示目标的所有依赖 $< 表示目标的第一个依赖 all : first second third @echo "\...

2019-09-21 09:08:30

阅读数 15

评论数 0

原创 第四载:makefile中变量的赋值方式

makefile类似于脚本程序,当然也支持程序里边变量的概念,makefile中的变量只是文本数据(字符串),没有C语言中的数字等,并且大小写敏感。 makefile中的变量有4种赋值方式: - 简单赋值( := )(最常用) - 递归赋值( = ) - 条件赋值( ?= ) - 追加赋...

2019-09-21 00:39:09

阅读数 12

评论数 0

原创 第三载:makefile中的伪目标

在前边的两个章节中,我们提到了makefile中的目标,并且知道这个目标存在且依赖没有更新,make就不再编译程序。 一般在默认的情况下 - make 认为目标对应着一个文件(可执行程序、so库等等) - 比较目标文件和依赖的新旧关系,决定是否执行命令 - make以文件处理作为第一优先级 ...

2019-09-20 08:43:51

阅读数 20

评论数 0

原创 第二载:makefile的结构

在上一篇中,我们只是简单的介绍了make跟makefile的基本概念,并且实现了一个简单的makefile,但是那个makefile仅仅是做一些打印工作,并没有什么实际性用途。在编写真正可用的makefile前,我们先来了解下makefile的结构。 前边也提到,makefile的意义在于: ...

2019-09-19 09:02:29

阅读数 21

评论数 0

原创 第一载:初识make与makefile

我们写程序完成后,都需要进行编译才能运行,在一些集成的IDE(如vs2010、QT等),都提供有一键编译的功能,整个编译过程(预处理、编译、链接),IDE已经帮我们屏蔽了。但是在嵌入式或Linux平台下的开发,基本都是通过make跟makefile来管理整个工程项目,即源码与源码之间如何关联、依赖...

2019-09-19 00:32:19

阅读数 17

评论数 0

原创 排序算法之 - 归并排序

这一章节所讲的归并排序,跟希尔排序一样,也是一种效率很高的排序方法,也同样采用了分而治之的方法. 归并排序的基本思想为:先把无序序列一分为二,然后分别对两边的序列进行排序,最后再整合两边已经排好的序列.下边已一张图来展示归并排序的思想(图是借用网友的,见做的非常简洁易懂,便引用之) 从途中我们看...

2019-05-12 23:52:06

阅读数 51

评论数 0

原创 排序算法之 - 希尔排序(基于选择排序,插入排序)

之前说的选择,插入,冒泡三种基本排序,时间复杂度都为O平方,直到希尔排序的出现,打破了O平方的魔咒.希尔排序的基本思想我理解是属于分而治之,把一个无序序列划分为若干个子序列,再分别对这写子序列使用三种基本排序方法进行排序. 下边直接看示意图: 要排的序列为 int array[] = {12,32...

2019-05-12 23:24:19

阅读数 113

评论数 0

原创 排序算法之 - 冒泡排序

与选择排序,插入排序一样,冒泡排序也是常规的排序法之一,冒泡排序的思想主要放在"冒泡"二字. 这个冒泡排序算法有点想水中的泡泡往上冒一样,水中的泡泡月往上变得越大,冒泡排序思想跟这个是一样的. 冒泡排序思想:取最后一个元素,往前遍历并与遍历的元素比较,符合交换规则(或大或小...

2019-05-12 12:16:04

阅读数 155

评论数 0

原创 排序算法之 - 插入排序

与选择排序,冒泡排序一样,插入排序也是常规的排序法之一, 插入排序的思想主要放在"插入"二字,主要就是从待排序列中取第一个待排元素,然后与其前面已排序列的元素比较,比较成功(或大或小),那么就把这个已排元素往后挪一个位置,空出来的位置就是插入的位置,依次循环.下边来看个示意图:...

2019-05-12 11:48:19

阅读数 40

评论数 0

原创 排序算法之 - 选择排序

所谓排序,就是把一系列同类型的元素按照一定规则顺序排好. 选择排序也是其中的方法之一,选择排序的思想主要放在"选择"二字,主要就是从待排序的序列中寻找最大/最小值,然后放到已经排好序的下一个交换位置,下边来看个示意图: 要排的序列为 int array[] = {12,32,...

2019-05-11 22:41:52

阅读数 45

评论数 0

原创 常用设计模式之 - 单例模式

单例模式在我们的日常开发中用的非常多,单例模式最大的特点就是只能生成一个类对象。 比方配置文件的类信息,就可以使用单例模式实现,因为配置文件是固定的,不论在代码的哪个位置获取配置项信息,得到的都应该是相同的信息。 既然只能生成一个类对象,那么我们就得考虑下如何实现这个只生成一个对象,在C++...

2019-05-04 21:53:35

阅读数 172

评论数 0

原创 算法随笔-替换字符串中的子串

在我们的项目里,经常会将字符串中的指定的内容替换为我们需要的内容,这里我们就来实现这这个小算法。 具体需求则为:将字符串中的指定子串替换为设置的字符串,并返回替换的总数,实现比较简单,主要是指针的运算,下边直接代码展示: #include <iostream> #include &...

2019-05-04 20:29:07

阅读数 274

评论数 0

原创 常用设计模式之 - 原型模式

在西游记中,我们常看到孙悟空用自己的猴毛变出很多个特征跟自己一模一样的"孙悟空"来, 可能仅仅是名字不一样,孙悟空二弟、孙悟空三弟、孙悟空四弟,除了名字不一样外,其他的特征完全一模一样,这个通过孙悟空创建出的多个跟自己一模一样的克隆品,在设计模式里头,我们称之为:原型模式 ...

2019-04-27 23:45:49

阅读数 60

评论数 0

原创 常用设计模式之 - 工厂设计模式(简单工厂、工厂方法、抽象工厂)

工厂模式是最常用的创建型模式之一,在开始工厂模式之前,我们先来看一个场景,假如要设计一个电脑类,生成的电脑对象要包含CPU,那么可能有人会这么设计: class PC { private: string m_CPU; public: PC(string nPCName) ...

2019-04-27 12:27:36

阅读数 100

评论数 0

原创 算法随笔-单词翻转(输入"abc def",返回 "def abc")

设计一个算法,将字符串中的单词首尾翻转,例如: 输入:"abc def",那么输出为:"def abc",这里我采用的是使用两个指针从字符串尾部开始往前遍历,遇到间隔符便提取一个单词,代码实现比较简单,直接上代码,如下: void reversal(...

2019-04-25 21:44:05

阅读数 63

评论数 0

原创 解决大批量数据插入mysql问题:使用mysqlimport工具从文件中导入

在我们日常项目中,经常会涉及对mysql数据库的读写操作,当需要大批量导入数据时,使用传统的insert方式,会使效率非常慢,解决的办法有:1、拼接sql 2、使用存储过程 3、使用工具从文件中导入。在这里我们要介绍的是使用mysqlimport工具导入。一般来说,在我们安装完成mysql后,该工...

2019-04-23 21:35:33

阅读数 111

评论数 0

原创 Redis客户端发生 : (error) MISCONF Redis is configured to save RDB snapshots... 错误解决办法

在使用redis客户 端时,执行命令有时候会发生如下错误 127.0.0.1:6379&gt; incrby index 2 (error) MISCONF Redis is configured to save RDB snapshots, but it is currently...

2019-03-05 07:14:26

阅读数 71

评论数 0

原创 Redis安装配置与启动停止

Redis是一个开源、高性能、基于键值对的缓存与存储系统,与 关系型数据库不同,作为NoSql的Redis数据库,其将所有的数据都存储在内存中,这就使得Redis 的读写速度远远高于mysql/Oracle等关系型数据库,使其成为了一款非常优秀的缓存数据库! 一、下边来说说Redis的安装,...

2019-03-03 20:55:59

阅读数 87

评论数 0

原创 算法随笔 - 求V型排序与倒V型排序数组的极值

现在来写一个求极值的算法,需求为:假设有一个整形数组,数值排列顺序为V型,即数值由大到小,再由小到大,例如int array[] = {100,99,93,92,91,89,12,9,7,5,3,1,6,8,87,123},现在要求的就是array的最小值,及其下标;类似的有倒V型排序的数组,求最...

2019-02-18 19:23:47

阅读数 355

评论数 0

原创 算法随笔 - 判断一个字符串是否对称

    今天来实现一个基础算法:判断一个字符串是否对称。例如 char str[] = "abcdcba",这样的字符串便是对称的。实现很简单,主要是指针操作即可,下边直接上代码 //头文件 #ifndef __LMSPUBLICLIB_H__ #define __LMSP...

2019-02-18 15:37:27

阅读数 98

评论数 0

原创 算法随笔 - 判定一个字符串是否为另一个字符串的前串和后串

    19年的第一个周末,把上周在公司划水摸鱼偷偷写的一个小程序搬到博客上来,这里搬的是:判断一个字符串是否为另一个字符串的前串。 比方有个char str[] = "hello my 2019! keep moving!",那么给一个子串,假如为 char str1[] =...

2019-02-16 15:38:57

阅读数 109

评论数 0

原创 算法随笔-根据指定分隔符分割字符串

    新的一年到来,第一周总是没什么状态,就随便写写简单的一些算法,今天就来实现一个字符串分割。     需求为:根据指定分割符,分割字符串,并将分割好的各个子串存入vector向量中。 举例:假如存在字符串char str[] = "123,456,789,abc,def"...

2019-02-14 22:52:11

阅读数 163

评论数 0

原创 第八载:makefile中函数定义及调用

在Makefile中,是支持函数使用的,Makefile中的函数包括make解释器自身预定义的函数,同时也支持我们自己定义函数。 在Makefile中, 通过define关键字来实现函数的自定义,并以endef关键字结束,自定义函数使用预定义函数call调用,后边跟自定义函数名及参数,如下就是一...

2018-12-23 11:31:43

阅读数 601

评论数 0

原创 C++中的类模板

    前边我们知道,C++中的泛型编程,有函数模板和类模板两种形式,我们之前已经对函数模板做了分析,这章我们就对类模板做个分析。将模板的思想应用于类,我们就可以只关注类的功能实现,不需要关注具体数据元素的类型,这种思想非常适用于编写数据结构相关的代码,比如数组类、线性表、栈和堆等,只需要实现他们...

2018-08-24 11:25:16

阅读数 172

评论数 0

原创 C++中的函数模板

之前我们知道的交换两个变量的方法有宏定义、函数,这两种方式都能实现两个变量的交换,但是各有各的优缺点 宏定义: - 优点:代码复用,适合所有的类型 - 缺点:缺少类型检查,宏在预处理阶段就被替换掉,编译器并不知道宏的存在 函数: - 优点:真正的函数调用,编译器对类型进行检查...

2018-08-23 19:57:54

阅读数 8947

评论数 8

原创 C++中的抽象类与接口

    在面向对象编程时,有一些抽象的概念,而且可以从生活中映射过来,比方如何求一个图形的面积?这里的问题就是:没说明是求什么图形的面积,所以就求不出图形的面积,但是图形在我们生活中却是一个实实在在存在的概念,没有具体的对象实例。     同样在面向对象编程中,这个抽象的概念就对应到抽象类   ...

2018-08-23 16:58:57

阅读数 91

评论数 0

原创 C++中的对象模型分析

到目前为止,我们都是使用class关键字来定义类,其实在C++中,class是一种特殊的struct     - 在内存中class依旧像struct一样,可以看作变量的集合     - class与struct遵循相同的内存对齐规则     - class中的成员函数与成员变量是分开存放的   ...

2018-08-23 12:24:10

阅读数 153

评论数 0

原创 C++中的多态特性

    前边我们知道,C++类之间有继承关系,子类能够哦继承父类并且拥有父类的属性,也能够定义子类自己的属性,古语就是:青出于蓝而胜于蓝。     但是子类中是否可以定义父类中的同名成员,使用时如何区分该成员是父类中的还是子类中的?下边代码来验证一下 #include &lt;iost...

2018-08-22 18:40:39

阅读数 291

评论数 0

原创 C++数据结构-单链表创建

    前边我们创建了顺序存储结构的线性表,简称顺序表,顺序表最大的问题是:插入和删除需要移动大量的元素。为了解决 这个问题, 我们引入链式存储结构的线性表,简称链表,链表与顺序表不同,链表的每个结点在内存中是分开存放的,每个结点都包含数据域和指针域:     - 数据域 :存储数据元素本身   ...

2018-08-22 00:20:25

阅读数 2655

评论数 0

原创 C++数据结构数组类的创建

    在C或C++的原生数组里,有一点不好的就是数组越界是察觉不到,代码也不会提醒,至于越界产生的bug什么时候引发系统问题,我们也无从知晓。在这里我们可以创建一个数组类,内部包含数组长度、数组越界访问时能主动发现。     数组类的创建我们还是按照顺序表的思路,创建一个Array类,实现基本...

2018-08-18 20:30:23

阅读数 1298

评论数 0

原创 C++数据结构-线性表顺序存储结构设计

线性表的顺序存储结构:指的是用一段地址连续的存储单元一次存储线性表中的数据元素,如下: 有了以上概念,我们可以使用一维数组来实现线性表的顺序存储结构,     存储空间:T* m_marry     当前长度:int m_length 整个类继承于之前我们写的List类,并采用泛型编程,在这里...

2018-08-13 23:40:32

阅读数 470

评论数 0

原创 C++数据结构线性表的本质和操作

    线性表(List)定义:具有相同类型的n(n≥0)个数据元素的有限序列     (a0, a1, a2, ... , an-1),ai是数据元素,n是表长度 线性表(List)具有如下性质:     - a0为线性表的第一个元素,只有一个后继     - an-1 为线性表的最后一个元素...

2018-08-12 23:29:51

阅读数 80

评论数 0

原创 C++数据结构类族结构的进化

我们在MyLib数据结构内定义了顶层父类MyObject,数据结构中的所有子类都继承于MyObject顶层父类,前边我们定义的智能指针类SmartPointer、异常类ExcepTion都要稍作改动(这里代码不再显示,直接在对应的篇章中继承自MyObject类即可),将他们继承于MyObject类...

2018-08-12 22:41:56

阅读数 118

评论数 0

原创 C++数据结构顶层父类的创建

    至于为什么要创建一个顶层父类,在当代软件架构实践中的经验     - 尽量使用单重继承的方式进行系统设计     - 尽量保持系统中只存在单一的继承树     - 尽量使用组合关系代替继承关系 但是C++编译器的差异,使得同样的代码可能表现不同的行为,例如new操作失败后,不同的编译器,...

2018-08-12 21:49:31

阅读数 170

评论数 0

原创 C++数据结构异常类的构建

    前边我们知道,C++中的异常类型有基本数据类型,除此之外,也可以是自定义类类型,对于类类型异常的匹配依旧是至上而下严格匹配,父子间的赋值兼容性原则在异常匹配中依然适用,也就是说抛出的子类异常,catch语句中可以使用父类类型接收处理。     一般的设计原则是:匹配子类异常的catch放在...

2018-08-12 20:06:46

阅读数 159

评论数 0

原创 C++中的异常

    代码中的异常与错误的区别,异常是可预见的,错误是不可预见的。C++内置了异常处理语法 元素try...catch...     - try 语句处理正常代码逻辑     - catch语句处理异常情况     - try 语句中的异常由对应的catch语句处理 try { d...

2018-08-12 18:26:08

阅读数 71

评论数 0

原创 C++模板技术之智能指针示例

    我们知道,软件开发中的内存泄漏是最严重的Bug之一,内存泄漏主要因为如下三点引起的:         - 动态申请堆空间,用完后不归还         - C++语言中没有垃圾回收的机制         - 指针无法控制所指堆空间的生命周期     在当代的C++软件平台中的智能指针  ...

2018-08-12 11:18:05

阅读数 89

评论数 0

原创 泛型编程简介

    在数据结构中,很大的一个特点就是只专注于数据元素之间的关系及特定结构上的算法,并不关注数据元素的具体类型。鉴于这个特点, 不考虑数据类型的泛型编程就非常适合用于数据结构。     泛型编程是不考虑具体数据类型的编程方式     例如对于交换两个数值的函数Swap,就可以考虑下边的泛型写法...

2018-08-12 10:04:14

阅读数 326

评论数 0

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