
C++
键盘春秋
键盘论王侯,数据写春秋~~~
展开
-
C++Const
由于项目需要转过来学习C++,结果第一天就被const卡的云里雾里。为了彻底搞清楚const到底是个什么鬼,决定为它单独写一篇博客进行记录,也作为我学习C++的第一篇博客。是什么定义const是用来对变量的类型加以限定来让变量不能改变的限定符。特点与非const类型所能参与的操作相比,const类型的对象能完成其中大部分,但也不是所有的操作都合适。主要的限制就是只能在const类型的对象上执行不改变原创 2016-03-05 23:26:44 · 784 阅读 · 1 评论 -
C++模板
关于模板,网上这篇写的比较详细: http://www.cnblogs.com/gw811/archive/2012/10/25/2738929.html 我这里仅简要写一下用法,方便快速学习。需求我们可以通过函数的重载以及指向函数的指针来实现函数的多态,C#里面还可以使用委托和事件来更方便的达到这个效果。但是毕竟重载太麻烦,相同的逻辑要写多次;指针无法解决参数类型的问题;如果你要封装一个类,他原创 2016-05-22 11:43:13 · 457 阅读 · 0 评论 -
C++版简单线程池
需求之前写过一个C#版本的简单线程池http://blog.youkuaiyun.com/ylbs110/article/details/51224979 由于刚刚学习了C++11新特性中的future,于是想到用它来实现一个线程池。实现思路基本和C#版本的一样,主要区别是委托的实现,线程句柄的不同和线程锁:本来C++有function模板,但是实现起来比较麻烦,这里主要是实现线程池,所以动态参数的委托就不原创 2016-05-07 13:45:15 · 1752 阅读 · 1 评论 -
二叉树的非递归插入和遍历
需求二叉树是一种常见的适合使用递归进行遍历的数据结构,但是如同绝大多数递归操作,二叉树的遍历也可以使用非递归的方式来实现,研究二叉树的非递归实现有助于更好的掌握二叉树的结构和使用方式。 递归好是好,只是太无脑。只会用递归解自循环数据就像只会用方程组解应用题那样,丧失了对数据结构本质的解析能力。实现 上图所示是一个简单的二叉树的示意图。如果要对上述二叉树进行中序遍历,我们应该先对根节点的左子树(如原创 2016-05-28 22:19:12 · 3938 阅读 · 0 评论 -
C++多维数组形参
需求今天在学习数据结构和算法时遇到一个需要传递多维数组形参的问题。问题本身很简单,向方法传递一个二维数组,但是使用的时候为了能够让数组维度值能够动态可变(比如向同一个方法传递3X3矩阵或者4X4矩阵),也还是费了些脑子。实现一维数组看多维数组形参传递之前我们先看看简单的一维数组。void arrTest(int arr[2]){ cout << sizeof(arr) << endl;}这原创 2016-05-13 22:14:30 · 2519 阅读 · 0 评论 -
C++右值引用
需求通读完了C++Primer,有很多问题困扰着我。这其中,除了万年老大难的指针外,还有一个被多次提到的知识点:左值引用和右值引用。 虽然在C++98中左值引用和右值引用对程序员来说处于透明状态,基本无需太过操心,但在C++11的新特性中,它们的区别却不得不引起我们的注意。是什么左值和右值在谈左值引用和右值引用之前,我们先来看看另外两个与之紧密相关的知识点:左值和右值。 网上这一篇讲得不错:ht原创 2016-04-09 17:07:54 · 742 阅读 · 1 评论 -
C++复习:一个小例子复习基础
前言经过两周的学习,C++基础部分基本已经有了一定的了解。正好前两天在群里看到一个哥们问了一个很有代表性的需求,于是决定以这个需求为例子,对现阶段所学知识做一个复习巩固。需求需求内容游戏中有一个推荐好友的功能,每推荐成功一个玩家自己都会获得奖励,并且推荐自己的玩家也会获得一定比率的分成,同时推荐他的玩家也会获得他分成的一定比率分成,直至没有推荐者或者最小分成为止。恩,你想的没错,就是传销模式。 需原创 2016-03-25 23:04:29 · 665 阅读 · 1 评论 -
C++引用
简介引用为对象起了另外一个名字,引用类型引用另外一种类型。通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名。 因为引用本身不是一个对象,所以不能定义引用的引用。 指向指针的引用 引用本身不是一个对象,因此不能定义指向引用的指针。但指针是对象,所以存在对指针的引用。原创 2016-03-12 17:54:23 · 1004 阅读 · 1 评论 -
C++智能指针
直接管理内存什么时候需要直接管理简而言之,当内存分配在栈上时,不需要直接管理,而当内存分配在堆上时则需要手动回收,或者等到堆上内存分配满了触发了自动回收机制。 关于堆和栈,这篇文章讲得浅显易懂:http://blog.youkuaiyun.com/hairetz/article/details/4141043 一个由C/C++编译的程序占用的内存分为以下几个部分 栈区(stack)—— 由编译器自动分配原创 2016-04-03 11:33:01 · 4638 阅读 · 1 评论 -
C++指针
简介定义指针是“指向”另外一种类型的复合类型。与引用类似,指针也实现了对其他对象的间接访问,然而指针与引用相比又有很多不同点:指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象。引用本身并非一个对象。一旦定义了引用,就无法令其再绑定到另外的对象,之后每次使用这个引用都是访问它最初绑定的那个对象。指针无需再定义时赋初值,和其他内置类型一样,在块作用域内定原创 2016-03-19 22:23:06 · 707 阅读 · 1 评论 -
哈弗曼编码实现文件压缩和解压缩
原理哈弗曼编码的本质是将文件中出现频率越高的字符用越短的二进制码代替从而达到节省空间的目的。为了达到这个目的,需要构建哈夫曼树。 哈弗曼树的构建过程为: 1. 将源文件所有字符及其出现次数构建哈弗曼节点 2. 将权值最小的两个节点作为左右叶子节点组成一个新的哈弗曼节点来替代原哈弗曼节点集合中的这两个节点 3. 重复步骤2直至只剩一个哈弗曼节点,则该节点为哈夫曼树 而每个节点的哈弗曼编原创 2016-06-05 17:29:24 · 3793 阅读 · 1 评论