C++
文章平均质量分 74
君临丶天下
一切皆有可能!
展开
-
strtok函数的使用注意事项
strtok函数的使用注意事项 strtok函数原创 2016-01-13 16:36:53 · 39142 阅读 · 8 评论 -
设计模式系列(十三)迭代器模式(Iterator Pattern)
设计模式系列(十三)迭代器模式(Iterator Pattern) 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露器内部的表示。也就是说,迭代器模式让我们能游走于聚合内的每一个元素,而又不暴露其内部的表示,把游走的任务放在迭代器上,而不是聚合上,这样就简化了聚合的接口和实现,也让责任各得其所。 学过面向对象编程语言的朋友一定对迭代器这个设计深有原创 2015-12-20 20:40:40 · 1070 阅读 · 0 评论 -
C语言中文件路径名的“双斜杠”和“单斜杠”的易错点(适用于C++和JAVA等语言)
路径名中到底使用“双斜杠”还是“单斜杠”? 这里主要以C语言作为例子进行介绍,C++和JAVA等其他语言基本适用。 当我们在一个程序中需要打开一个文件的时候,经常会涉及到路径的问题,在VS环境中,我们一般将要打开的文件放在和源文件的同等目录下,从而避免了写路径的问题,只需要写文件名和格式后缀就行了。但是,在较大的项目中,一般情况下,我们经常需要将不同的文件进原创 2015-10-24 16:11:56 · 17600 阅读 · 3 评论 -
编程语言中常见的判断、选择以及循环语句的使用场合
1. 到底使用if-else if-else还是使用switch-case? 基本上在所有的编程语言中都会有这些语句,只是表达形式可能不同。初学者可能比较疑惑的是,到底该怎样区分和使用这些语句。下面将if-else if-else语句简称为if语句,将switch-case语句简称为switch语句。 if语句和switch语句都可以用来实现判断选择的逻辑。比如原创 2015-10-30 21:36:25 · 5553 阅读 · 0 评论 -
三目运算符"?:"的透彻分析
三目运算符"?:"的透彻分析 在初学C语言以及类似的语言时,大家可能对于三目运算符"?:"的使用及意义比较混乱,下面对这个运算符进行详细的解释。 之所以称之为三目运算符是因为这个运算符有三个操作数,即int num = (i == 0) ? 1 : 2; 这里?:运算符包含了三个操作数,即i == 0、1和2。这句话的含义就是当i等于0为真原创 2015-10-30 22:49:01 · 1726 阅读 · 0 评论 -
从性能角度看前缀++和后缀++(++i和i++的深入剖析)
从性能角度看前缀++和后缀++(++i和i++的深入剖析) 在初学原创 2015-10-30 23:01:15 · 2317 阅读 · 2 评论 -
透彻分析C/C++中memset函数
透彻分析C/C++中memset函数 在C语言中,经常需要对内存进行操作,里面涉及很多函数,但是memset函数的使用有一点需要大家格外注意,这也是我在做项目时遇到过的一个问题,调试了很久才找出来错误。 函数原型是:void *memset(void *s, int ch, size_t n); 函数功能是:将s所指向的某一块内存中的前n个字节的内原创 2015-11-03 21:33:10 · 43534 阅读 · 5 评论 -
解决VS2013中出现类似于error C4996: 'scanf': This function or variable may be unsafe的安全检查错误
用习惯了VS老版本的人当刚使用VS2013的时候可能总遇到类似于这样的错误: error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See onli原创 2015-11-03 21:48:30 · 103823 阅读 · 11 评论 -
多态性之编译期多态和运行期多态(C++版)
编译期多态和运行期多态(C++版) C++中最为经典的就是多态性,多态性充分体现了面向对象的思想,并且是C++与C的最大区别之一。多态性分为编译期多态和运行期多态,也称为静态多态和动态多态,有些人也称其为编译时多态和运行时多态,不管什么称呼,万变不离其宗,一个是编译期的静态的多态,一个是运行期的动态的多态,那么它们在C++中分别体现在哪里呢?又有什么区别呢?下面将详细介绍(重点是原创 2015-11-05 20:16:01 · 7038 阅读 · 7 评论 -
C++模板类之理解编译器的编译模板过程
C++模板类之理解编译器的编译模板过程 以前经常遇到询问使用模板到底是否容易的问题,我的回答是:“模板的使用是容易的,但组织编写却不容易”。看看我们几乎每天都能遇到的模板类吧,如STL, ATL, WTL, 以及Boost的模板类,都能体会到这样的滋味:接口简单,操作复杂。 我在5年前开始使用模板,那时我看到了MFC的容器类。直到去年我还没有必要自己编写模板类。转载 2015-12-20 21:27:18 · 3686 阅读 · 0 评论 -
设计模式系列(四)简单工厂模式(Simple Factory Pattern/Static Factory Method)
设计模式系列(四)简单工厂模式(Simple Factory Pattern/Static Factory Method) 简单工厂模式又被成为静态工厂方法,所以其外文名一般是Static Factory Method。其属于创建型模式,本质上并不属于23种GOF设计模式之一,这种模式可以称之为一种编程习惯,算是一种比较良好的设计习惯。那么什么是简单工厂设计模式呢?从概念上来原创 2015-12-04 09:56:16 · 934 阅读 · 0 评论 -
设计模式系列(十四)组合模式(Composite Pattern)
设计模式系列(十四)组合模式(Composite Pattern) 组合模式原创 2015-12-22 21:07:01 · 995 阅读 · 0 评论 -
设计模式系列(八)单例模式(Singleton Pattern)
设计模式系列(八)单例模式(Singleton Pattern) 单例模式就是确保一个类只有一个实例,并提供一个全局的访问点。具体来看,就是指定义的某个类,在程序运行期间,只允许有一个实例对象,即在内存中仅仅有一块内存用来存储这个类的唯一的实例对象,程序运行期间不允许出现第二个该类的实例对象。 很多会问,为什么定义了一个类却只实例化一个对象。这个主要是因为,有时原创 2015-12-07 11:28:18 · 902 阅读 · 0 评论 -
设计模式系列(七)简单工厂模式、工厂方法模式和抽象工厂模式对比
设计模式系列(七)简单工厂模式、工厂方法模式和抽象工厂模式对比 在前面的三篇文章中,依次讲解了简单工厂模式、工厂方法模式和抽象工厂模式,这篇文章主要对其进行简单的对比和概括,详细部分大家可以参考前三篇文章。 简单工厂模式:点击打开链接 工厂方法模式:点击打开链接 抽象工厂模式:点击打开链接 下面我们来总体看一下这三个模式的例原创 2015-12-05 13:16:19 · 818 阅读 · 0 评论 -
设计模式系列(六)抽象工厂模式(Abstract Factory Pattern)
设计模式系列(五)抽象工厂模式(Abstract Factory Pattern) 抽象工厂模式原创 2015-12-04 16:47:48 · 834 阅读 · 0 评论 -
设计模式系列(二)观察者模式(Observer Pattern)
设计模式系列(二)观察者模式 观察者模式是指在对象之间定义一对多的依赖,这样一来,当一个对象改变状态时,依赖它的对象都会收到通知,并自动更新,这里有主题和观察者之分,一般也可以称为发布/订阅模式。最简单的例子就是订阅报纸,比如说自己作为观察者,订阅了"人民日报"这个主题,那么当人民日报出新的报纸的时候就会及时送到自己即观察者的手中。 观察者模式的实现方法有很多种,一原创 2015-12-01 17:33:52 · 740 阅读 · 0 评论 -
设计模式系列(一)策略模式(Strategy Pattern)
设计模式系列(一)策略模式 设计模式作为一种经验的总结,只要使用恰当可以帮助我们解决很多问题,尤其是实现代码的复用和扩展。现在先来看看第一种设计模式,即策略模式(Pattern:Strategy)。 策略模式是指定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 (1)优点:可以动态地改变对象的行为,主要是通过组合和多原创 2015-12-01 17:23:17 · 1024 阅读 · 0 评论 -
设计模式系列(三)装饰者模式(Decorator Pattern)
设计模式系列(三)装饰者模式(Decorator Pattern) 装饰者模式是指动态地将责任附加到对象上,而不必改变原类文件。对于扩展功能,装饰者模式提供了继承以外的另一种扩展对象功能的方式,不过装饰者模式比继承更加具有弹性。装饰者模式允许行为可以被扩展,而无须修改现有的代码。它使用组合和委托的方式来实现。 装饰者模式的设计原则是:开放-关闭原则,即对扩展开放原创 2015-12-01 21:18:10 · 700 阅读 · 0 评论 -
设计模式系列(五)工厂方法模式(Factory Method Pattern)
设计模式系列(五)工厂方法模式(Factory Method Pattern)原创 2015-12-04 16:10:31 · 837 阅读 · 0 评论 -
C中堆和栈的区别
C中堆和栈的区别 一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分: 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放 ,程序结束时可能由OS回收。注意它转载 2015-11-06 22:04:30 · 664 阅读 · 0 评论 -
C语言实现链表之双向链表(一)头文件
C语言实现链表之双向链表(一)头文件 前面已经出过一个单向链表的系列,这里给出双向链表的实现,这一系列的实现与单向链表有很多类似之处,大家可以参考单向链表的系列。 单向链表的系列(一)的链接是:点击打开链接 双向链表主要就是加上了一个前向指针其他的并没有太多变化,直接进入正题。 本次设计的链表操作库主要包含三个文件,分别原创 2015-11-24 16:57:17 · 2101 阅读 · 0 评论 -
C语言实现链表之双向链表(二)结点内存申请及数据初始化
C语言实现链表之双向链表(二)结点内存申请及数据初始化 在上一篇文章中已经给出了整体的设计框架,现在讲逐一给出每一个函数的实现,为了一一讲解,清晰一点,将分开介绍。 本篇文章将给出MyList_Bidirection.c---实现文件的第一个函数,即对链表中的一个结点申请内存并对其内部的数据进行初始化的函数。程序如下,由于是第一个函数,所以会给出整个文件的前面部原创 2015-11-24 17:04:57 · 1638 阅读 · 0 评论 -
C语言实现链表之双向链表(十三)获取数据对应的结点
C语言实现链表之双向链表(十三)获取数据对应的结点 上一篇文章给出了判断链表是否为空以及获取链表长度的两个函数,本篇文章将给出一个比较特殊的函数,说其特殊并不是因为功能,而是因为函数的参数,下面请看程序。/*==============================================================================原创 2015-11-24 17:31:49 · 787 阅读 · 0 评论 -
C语言实现链表之双向链表(十四)链表打印
C语言实现链表之双向链表(十四)链表打印 上一篇文章给出了获取数据对应的结点的函数,本篇文章将给出链表打印。/*============================================================================== * 操作 :打印链表中的所有结点的数据元素* 操作前:pHeadNode为链表的头原创 2015-11-24 17:33:43 · 1286 阅读 · 0 评论 -
C语言实现链表之双向链表(十五)测试用例
C语言实现链表之双向链表(十五)测试用例 上一篇文章给出了最后的两个函数,即链表打印和排序,这篇文章将给出所有函数的测试用例,即ListTestTop.c文件。/*******************************************************************************************原创 2015-11-24 17:36:16 · 1055 阅读 · 0 评论 -
用EA(Enterprise Architect)将C++的".h"文件转换成UML类图
如何使用EA(Enterprise Architect)工具使C++程序生成UML类图 本篇文章主要针对于C++程序的UML类图生成方法介绍。大家可以在网上先搜索Enterprise Architect工具,下载后安装使用,这个工具很强大,不过本文只介绍最简单的UML类图生成方法,仅针对于C++的.h文件,过程也很简单。(1)点击Creat a New Project原创 2015-12-01 11:27:08 · 7651 阅读 · 1 评论 -
设计模式系列(十二)模板方法模式(Template Method Pattern)
设计模式系列(十二)模板方法模式(Template Method Pattern) 模板方法模式是在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 在最开始先来说一个和模板方法模式关系比较紧密的原则:“好莱坞原则”,即别调用我们,我们会调用你。形象的来说就是,别打电话给我,在我需要原创 2015-12-13 16:41:04 · 968 阅读 · 0 评论 -
设计模式系列(十一)外观模式(Facade Pattern)
设计模式系列(十一)外观模式(Facade Pattern) 外观模式提供了统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。外观模式的意图是简化接口,让用户更加方便使用。举例来说,如果在家里布置了一个家庭影院,包括电影显示器,遥控器,爆米花机器等,当你想要享受一场电影的时候,你需要打开显示器、操作遥控器的一系列按钮、打开爆米花机器等,也就是说享原创 2015-12-11 20:35:13 · 693 阅读 · 0 评论 -
设计模式系列(十)适配器模式(Adapter Pattern)
设计模式系列(十)适配器模式(Adapter Pattern) 适配器模式是将一个类的接口转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。适配器实现了客户与具体实现的解耦,简单来说,适配器模式就是改变接口以符合客户的期望。例如:我们生活中常见的插座的适配器、无线网卡适配器、电源适配器等,这些都是用来进行不同接口的转换,更具体的来说就是我们手机充电的时候可能只需原创 2015-12-11 19:45:42 · 824 阅读 · 0 评论 -
C语言实现链表之双向链表(十二)判断链表是否为空和获取链表长度
C语言实现链表之双向链表(十二)判断链表是否为空和获取链表长度 上一篇文章给出了设置结点数据与获取结点数据的两个函数,本篇文章将给出判断链表是否为空和获取链表长度的函数,共两个函数。/*============================================================================== * 操作 :检原创 2015-11-24 17:31:13 · 4014 阅读 · 0 评论 -
C语言实现链表之双向链表(十一)设置结点数据与获取结点数据
C语言实现链表之双向链表(十一)设置结点数据与获取结点数据 上一篇文章给出了删除任意结点的函数,本篇文章将给出设置结点数据的函数以及获取结点数据的函数,共两个函数。/*============================================================================== * 操作 :对结点的数据元素进行原创 2015-11-24 17:28:35 · 640 阅读 · 0 评论 -
C语言实现链表之双向链表(三)创建链表
C语言实现链表之双向链表(三)创建链表 上一篇文章已经给出了第一个函数,即为结点分配内存并初始化,这篇文章将给出第二个函数,即创建链表。这个函数比较常用,但是可能需求不一样,注意,双向链表在建立的时候,要对前向指针进行处理,也并不复杂,只要将前向指针指向前面的结点即可,下面看程序。/*========================================原创 2015-11-24 17:08:50 · 1144 阅读 · 0 评论 -
C语言实现链表之双向链表(四)清空链表
C语言实现链表之双向链表(四)清空链表 上一篇文章给出了创建链表的函数,本篇文章将给出清空链表的函数,程序如下。/*============================================================================== * 操作 :清空链表,释放结点内存,将链表重置为空表* 操作前:ppHeadN原创 2015-11-24 17:13:45 · 2097 阅读 · 0 评论 -
C语言实现链表之双向链表(五)头结点前插入结点
C语言实现链表之双向链表(五)头结点前插入结点 上一篇文章给出了清空链表的函数,本篇文章将给出插入结点---在头结点之前插入的函数。注意对前向指针的处理。/*============================================================================== * 操作 :在头结点之前加入一个新结点*原创 2015-11-24 17:16:49 · 1557 阅读 · 1 评论 -
C语言实现链表之双向链表(六)删除头结点
C语言实现链表之双向链表(六)删除头结点 上一篇文章给出了在头结点之前插入结点的函数,本篇文章将给出删除头结点的函数。依旧需要注意的是对前向指针的处理。/*============================================================================== * 操作 :删除头结点* 操作前:pp原创 2015-11-24 17:19:48 · 2318 阅读 · 0 评论 -
C语言实现链表之双向链表(七)尾结点后插入结点
C语言实现链表之双向链表(七)尾结点后插入结点 上一篇文章给出了删除头结点的函数,本篇文章将给出在尾结点后插入结点的函数。注意双向链表中前向指针的处理,与单向链表对比学习一下。/*============================================================================== * 操作 :在尾结点原创 2015-11-24 17:22:25 · 1853 阅读 · 0 评论 -
C语言实现链表之双向链表(八)删除尾结点
C语言实现链表之双向链表(八)删除尾结点 上一篇文章给出了在尾结点之后插入结点的函数,本篇文章将给出删除尾结点的函数。/*============================================================================== * 操作 :删除尾结点* 操作前:ppHeadNode为链表的头指针的二原创 2015-11-24 17:24:33 · 2796 阅读 · 0 评论 -
C语言实现链表之双向链表(九)在任意位置插入结点
C语言实现链表之双向链表(九)在任意位置插入结点 上一篇文章给出了删除尾结点的函数,本篇文章将给出在任意位置插入结点的函数。/*============================================================================== * 操作 :在任意位置插入结点* 操作前:pHeadNode为链表原创 2015-11-24 17:25:13 · 1044 阅读 · 0 评论 -
C语言实现链表之双向链表(十)删除任意结点
C语言实现链表之双向链表(十)删除任意结点 上一篇文章给出了插入任意结点的函数,本篇文章将给出删除任意结点的函数。/*============================================================================== * 操作 :删除任意结点* 操作前:ppHeadNode为链表的头指针的二级原创 2015-11-24 17:27:05 · 1029 阅读 · 0 评论 -
设计模式系列(九)命令模式(Command Pattern)
设计模式系列(九)命令模式(Command Pattern) 命令模式是将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象,命令模式也支持可撤销的操作。命令模式将行为请求者与行为执行者解耦,从而实现了松耦合的原则。例如:去餐厅点餐的时候,顾客只负责点餐,然后交给服务员,服务员将订单交给厨师去做,最后顾客开始享用美味的饭菜,但是整个过程顾客只关心自己点了什么,而不关原创 2015-12-10 20:10:51 · 988 阅读 · 0 评论