自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ 强制类型转换

概述C++ 兼容 C,对于C语言的类型转换也是支持的。但是C风格的类型转换有很多缺点,它可以任意类型之间进行转换,查找源类型比较麻烦,而且有的类型之间进行转换是不安全的行为。C++的设计强调类型安全,为了修补这个大坑,C++提供了四种的类型转换:static_cast,const_cast,dynamic_cast,reinterpret_cast。对于C的写码形式为:(type) exp...

2018-12-30 23:27:54 405

原创 C++ 类中成员函数分析

概述之前对成员变量的分布进行了整理,今天就对成员函数进行整理。1、非静态成员函数C++的设计准则之一就是:非静态成员函数至少和一般的非成员函数的执行效率相同。为了实现上衣准则,编译器会对非静态成员函数进行改进,先看下面的例子:float func(const Point3d* _this) { .... }float Point3d::func() const { .... }编...

2018-12-30 12:55:13 386

原创 火车运煤问题(马车运草)问题

题目内容:你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大——每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市?这道题一开始看上去好像是无解的,因为你的火车每一公里就要消耗一吨煤,而到目的地有1000公里,而火车最多只能装1000...

2018-12-30 11:12:11 1421

原创 坚持书写博客一个月之后的感受

不知不觉已经在博客里整理所学一个多月了,起初的目的是把所学的知识进行数字化整理,因为这么多年的记录,手上有好几本笔记本,想找个知识点需要到处翻找,甚是烦恼。而通过网上整理之后,想看的时候可以直接上网,通过标题来筛选,况且有的时候笔记本不是随身携带的。目的是单纯的,但是整理的过程并不容易。下面就说一下我发布一个博客的过程,以此来记录自己的成长。1、搜集资料虽然我手里有一些资料,但很多都是记录的个...

2018-12-27 21:00:39 337

原创 GIT远程分支和变基

1、远程分支远程引用是对远程仓库的引用,包括分支、标签等。使用命令git ls-remote (remote) 来显式地获得远程引用的完整列表,或者通过**git remote show (remote)**获得远程分支的更多信息。远程跟踪分支是远程分支状态的引用。它们是你不能移动的本地引用,当你做任何网络通信操作时(fetch pull push),他们会自动移动。它们以(remote)/...

2018-12-27 19:52:28 2018 2

原创 GIT分支操作

概述对于大项目而言,使用分支是不可避免的。GIT同样也提供了分支功能,但是GIT分支轻量,操作速度快。下面就对GIT分支内容进行的整理。1、分支简介之前我们整理过,GIT保存的是一些不同时刻的文件快照,而不是文件的变化和差异。在进行提交操作(git commit)时,GIT会保存一个提交对象(commit object)。该提交对象会包含一个指向暂存内容快照的指针、作者的姓名和邮箱、提交时...

2018-12-26 21:53:28 471

原创 Git的讲解和简单使用

概述GIT属于分布式控制系统,客户端不只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,如果服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。而集中式版本控制系统,只是获取最后一次快照,如果服务器发生故障,则所有的历史记录丢失。下面就对GIT的简单整理。1、GIT的原理GIT与其它的版本控制系统在保存和对待各种信息的时候有很大差异,理解这些差异有助于GIT的使用。...

2018-12-25 23:33:33 246

原创 版本控制系统的总结

概述版本控制系统:是指对各种代码、配置文件及说明文档等文件变更的管理工具。包括:检入和检出控制、分支和合并、历史纪录等。 在我们日常工作中,经常会用到版本控制系统,尤其是在多人协作的项目中。下面就对我使用过的版本控制系统进行的总结。1、TFSTFS是Team Foundation Server(TFS)的简称,是软件项目生命周期管理工具,版本控制只是它的一小部分功能。另外还包括其他功能,如需...

2018-12-24 21:19:03 766

原创 数据结构(第一篇:基础知识)

概述我们程序员都听过一句话:程序 = 数据结构 + 算法。可见数据结构的重要性。下面就对数据结构中一些概念的总结。数据:所以能保存到计算机中的符号。包括文本、声音、图像等。数据元素:数据的基本单位,也称节点或记录。数据项:有独立含义的数据最小单位。若干个数据项构成一个数据元素,数据项不可分割。数据对象:相同特性数据元素的集合,是数据的一个子集。数据结构:相互之间存在一种或多种特定关系的...

2018-12-24 19:41:13 532

原创 C++ 虚函数及多态原理详解

概述虚函数机制作为C++面向对象的重要支撑,但是我们对它知之甚少,因为它由编译器实现。今天就对虚函数进行整理,这样出去吹牛会更有底气。1、虚函数的支持原理每一个拥有虚函数的类会产生出一堆指向virtual functions的指针,放在表格中,这个表格被称为virtual table(虚函数表)。在定义类的对象时,编译器会给这个对象插入一个合成指针,指向相关的virtual table。这...

2018-12-23 22:41:23 742

原创 C++ 类中数据成员分布详解

概述我们都知道类中包含着数据成员,但是数据成员在内存中是怎样分布的呢?继承之后数据又是怎样布局的呢?下面对这些问题进行整理。类的空间分布是编译器编译的结果,不同的编译器有可能会不一样,但是原理是一样的。1、空类我们定义了一个空类,然后对空类进行sizeof计算,如下:class myclass{};cout << sizeof myclass &a

2018-12-22 23:39:13 5317

原创 图像处理库 FreeImage的简述

1、freeimage简介freeImage 是一个免费的、开源的,跨平台的,支持当今多媒体应用程序所需的流行图形图像格式的处理库。FreeImage 的主要功能有:多格式位图的读写方便的位图信息获取位深度转换位图页面访问基本的几何变换和点处理通道合并与混合等FreeImage 暂时不支持矢量图形和高级图像处理,位图绘制需要由用户来完成。 FreeImage 中的所有函数都以...

2018-12-20 17:24:59 3763

原创 字节顺序标记(ByteOrderMark)BOM

概述之前我们整理了大端和小端 和 字符编码 ,知道对于多字节的数据会存在不同机器之间的存储问题。对于整形我们知道可以通过网络字节序进行传输,但是对于不同编码的字符串我们该怎么办呢?其实字符串就是一连串的内存数据,而内存数据我们可以看成一个数组,对于传送就是把数组中的数据按个发送,发送过程并不会影响数据。但是不同机器之前对数据的解释有可能不一致。而BOM就是对数据怎么解释的一个标记。1、BOM...

2018-12-20 16:52:56 3487

原创 JSON学习整理

概述之前对XML进行了整理,今天对和它很相似的JSON的进行整理。1、什么是JSONJSON是JavaScript Object Notation(javaScript对象表示法)的简称,是轻量级的文本数据交换格式,独立于语言,类似于XML。在JSON出现之前,大家一直用XML来传递数据。XML本身不算复杂,但是,加上DTD、XSD、XPath、XSLT等一大堆复杂的规范以后,使用起来就比...

2018-12-20 11:11:42 263

原创 n的阶乘末尾含有“0”的个数

关于这道题,见过两种问法:给定参数n(n为正整数),请计算n的阶乘n!末尾所含“0”的个数。(n!%(10^k)) == 0。已知n,求能使上式成立的K的最大值。问题分析:显然,对于阶乘这个大数,我们不可能将其结果计算出来,在统计其末尾所含有的“0”的个数。所以必须从其数字特征进行分析。首先考虑一般的情形。对于任意一个正整数,若对其进行因式分解,那么其末尾的“0”必可以分解为2*5。...

2018-12-18 20:47:47 2250

原创 C++ const的详解

概述const 是一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器哪些值是保持不变的,如果我们的代码试图去修改,编译器会给出错误提示。const可以使用在很多地方,下面是我对const进行的梳理。1、const修饰变量修饰变量时,表示此变量的值是只读的,不能被修改,因为不能被修改所以必须初始化。如:const int abcd = 1234;const int ival; /...

2018-12-17 23:40:04 1480

原创 C++ inline的详解

1、inline的作用在C++中,为了解决一些频繁调用的小函数大量消耗栈内存问题,特别的引入了inline修饰符,表示为内联函数。栈空间是指防止程序局部数据的内存空间。在系统下,栈空间是有限的,如果频繁大量的使用就会造成因栈空间不足而导致程序出错的问题。在程序编译时,编译器将程序中出现的内联函数调用表达式用内联函数的函数体进行替代,类似于宏展开。如:int min ( int v1, in...

2018-12-17 19:59:15 4200

原创 IT界的经典定律

概述IT有很多的定律,不仅在揭示IT行业的发展规律,而且还说明了一些人生道理。我们要了解这些规律,利用这些规律,懂的顺势而为。下面就整理一下,我所知道的一些IT经典定律。1、摩尔定律摩尔定律是由英特尔(Intel)创始人之一戈登·摩尔(Gordon Moore)经过长期观察发现并提出的。其内容为:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍...

2018-12-14 20:02:33 880

原创 程序配置文件的发展过程

概述我们在书写程序时,难免会使用到程序的配置文件。这样程序的某些功能,有可能通过修改配置文件就能实现,而不必进行代码的重新编译。下面我整理了我在C++开发过程中碰见的配置文件。1、INI文件INI文件就是一个text文本文件,只不过这种文件要遵循一定的INI文件格式。早期的windows系统主要使用INI文件作为系统的配置文件。INI是英文initialize的头三个字母缩写,ini文件的...

2018-12-14 19:21:48 1029

原创 C++ lambda表达式及其原理

概述C++ 11中引入了新的lamdba表达式,使用也很简单,我最喜欢的是不用给函数取名称,每次给函数取名称都感觉自己读书太少~1、lambda表达式lambda表达式可以理解为一个匿名的内联函数。和函数一样,lambda表达式具有一个返回类型、一个参数列表和一个函数体。与函数不一样的是lambda必须使用尾置返回类型。一个lambda表达式表示一个可调用的代码单元。语法:[capture...

2018-12-13 23:25:27 8362 5

原创 C++ extern关键字的使用总结

概述上次我们整理C++编译器函数名修饰规则时,有提到过extern的一种用法,但是extern还有别的使用,今天就对它进行完整的整理。1、声明外部变量C++程序基本都是分离式编译机制,允许我们将程序分割成若干个文件,每个文件可被独立编译。但是这样需要共享代码时,就有点麻烦。因为各个文件中的全局变量是互相不透明的,可见域限制在文件内部。而extern可以解决这个问题。如果一个文件想使用别处定...

2018-12-12 21:37:10 3134

原创 C++ static关键字的使用总结

概述平时写代码时会用到类的静态函数,但是对于static整体认识并不明朗,今天就对static进行整理。1、c中static的用法static在c中的作用主要有两个:限定作用域、保持内容持久化。主要使用的地方有以下几种。1.1、静态全局变量语法:在全局变量前面加上关键字static,全局变量就定义成一个静态全局变量。如:static int globleValue;初始化:未经初始化的...

2018-12-12 20:25:37 680

原创 cmdline(命令行)参数解析库

概述有时写的程序需要用户可以定制程序的行为,我们除了提供交互式的操作,还可以使用命令行的方式,这样更有效率,而且可用于编写脚本程序。但是对于命令行的解析,需要根据不同的场景进行不同的解析,这样很是繁琐,所以我上网查找到了cmdline解析器。下面就总结一下cmdline的使用,若以后有空把这个库分析一下给补上。1、cmdline简介cmdline是一个非常好用的C++命令行解析器,使用模板书...

2018-12-11 20:52:12 11153 7

原创 XML的学习

概述在程序开发用,总会用到配置文件,或者数据传输,而这总会碰见对XML的操作,今天就来整理XML相关知识。1、什么是XMLXML是可扩展标记语言(Extensible Markup Language)的缩写。主要是用来传输和存储数据。因为XML与操作系统、编程语言无关,所以方便不同系统、不同应用之间的数据交互。具体的应用场景为:作为一种简单的数据库传输数据做软件的配置文件2、...

2018-12-10 22:24:23 401

原创 C++ 引用以及引用与指针的区别

概述前面整理了指针的用法,但是经常和指针拿来对比东西是引用。确实指针在使用的过程中会有很多的麻烦,比如赋初值、使用时判空、无效指针、深浅拷贝等等。在我看来引用的指针的高级替代,它的使用规则规避了很多出错的可能。下面就对引用进行整理。需要注意的是C11引入了右值引用,我们这里所说的引用都是在讨论左值引用。1、什么是引用?引用是给对象起了一个别名,它也是一种复合类型。通过将声明符写成&...

2018-12-09 21:54:58 2702

原创 C++指针详解

概述C/C++语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上。因此,说指针是C/C++语言的灵魂一点都不为过。 有好的一面,必然会有坏的一面,指针的灵活导致了它的难以控制,所以C/C++程序员的很多bug是基于指针问题上的。今天就对指针进行详细的整理。1、指针是什么?指针是“指向(point to)”另外一种类型的复合类型。复合类型是指基于其它类型定义的类型。理解指针,先从...

2018-12-08 22:55:09 99492 24

原创 C++编译器函数名修饰规则

概述前段时间整理了函数的调用约定,顺便说了C编译器下的函数名修饰规则,其中漏掉了C++中函数名的修饰规则,今天就给补上。1、函数名字修饰的意义函数的名字修饰就是编译器在编译期间创建的一个字符串,用来指明函数的定义或原型。链接程序或其他工具有时需要指定函数的名字修饰来定位函数的正确位置。(链接问题后面再整理)多数情况下程序员并不需要知道函数的名字修饰,链接程序或其他工具会自动区分他们。当然,...

2018-12-06 21:14:53 2111

原创 VS中使用西红柿插件添加注释的方法

概述刚开始作为程序员时,写代码使用IDE是VS2010,2010中在“工具->宏”中可以自定义注释,这样单位里所有的人只要把这个文件加载到VS中后,所有人的注释就会统一格式。但是由于插件功能的强大,之后的VS版本中,这个功能就给去掉了。没有办法,只能学习使用插件进行注释了。1、添加函数注释首先在VS的代码编辑页鼠标右键,点击如下图的菜单:选择框选的内容,然后选择“Document ...

2018-12-04 17:30:57 3615

原创 C++数组的详细解析

概述数组在写程序时经常用到,但是对于它和指针的关系,自己经常搞混,所有抽点时间对数组进行整理。1、数组的概念和使用数组是用来存储相同类型的变量的顺序集合。所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。语法:type arrayName [ arraySize ][arraySize1]; arraySize必须是一个大于等于零的整数常量。...

2018-12-03 21:42:31 36562 5

原创 C++编译器合成的默认函数(第二篇)

概述前面我们整理了编译器合成的默认构造函数,也进行了深度的解析,那其他的合成函数是怎样的呢?下面就对其他的合成函数进行逐一整理。1、析构函数当对象被销毁的时候,会自动调用的函数。主要用来销毁类中申请的资源。格式跟构造函数差不多,只是在前面增加一个“~”符号。注意:对于未定义析构函数的类,编译器会默认生成一个非虚析构函数,该析构函数会调用成员以及基类的析构函数。如果在类中申请了动态资源...

2018-12-02 18:59:46 2159 3

原创 C++编译器合成的默认函数(第一篇)

1、什么是构造函数?构造函数就是一类特殊的成员函数,用来控制对象的初始化过程。无论何时类的对象被创建,就会自动调用构造函数,构造函数不能手动调用。语法:函数名与类名相同,并且没有返回类型的函数。说明:类可以包含多个构造函数,和重载函数差不多。构造函数不能被声明成const的。跟防控属性没有关系,可以是public、protected或者private。class Sale...

2018-12-02 00:18:14 574

空空如也

空空如也

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

TA关注的人

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