- 博客(42)
- 收藏
- 关注
转载 二叉树递归与非递归遍历(附完整源码)
出处:http://blog.csdn.net/ns_code/article/details/12977901二叉树是一种非常重要的数据结构,很多其他数据机构都是基于二叉树的基础演变过来的。二叉树有前、中、后三种遍历方式,因为树的本身就是用递归定义的,因此采用递归的方法实现三种遍历,不仅代码简洁且容易理解,但其开销也比较大,而若采用非递归方法实现三种遍历,则要用栈来模拟实现(
2014-03-28 08:37:15
621
转载 sizeof,终极无惑(上)
来源:http://blog.csdn.net/freefalcon/article/details/548390. 前向声明sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着“辛苦我一个,幸福千万人”的伟大思想,我决定将其尽可能详细的总结一下。但当我总结的时候才发现,这个问题既可以简单,又可以复杂,所以本文
2014-03-27 14:13:33
428
转载 n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字
来源:http://blog.csdn.net/lzj509649444/article/details/7056742题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。分析:我
2014-03-06 10:32:32
712
转载 字符串匹配的KMP算法
来源 :http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html作者: 阮一峰日期: 2013年5月 1日字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,
2014-03-05 11:07:09
494
转载 字符串匹配算法——利用有限自动机进行匹配
来源: http://www.cnblogs.com/jolin123/p/3443543.html本文内容与《算法导论》中字符串匹配章节相关并部分摘录。 常用的字符串匹配算法有朴素字符串匹配算法,Rabin-Karp算法,利用有限自动机进行字符串匹配和KMP算法等。前面两种比较简单,重点是后面两种。 利用有限自动机进行字符串匹配 假设要对文
2014-03-05 11:05:07
1546
转载 串的模式匹配算法---RK
这一节介绍一下由Rabin和Karp提出的RK算法。1,RK算法的基本思想 HASH! 如果两个字符串hash后的值不相同,则它们肯定不相同;如果它们hash后的值相同,它们不一定相同。 RK算法的基本思想就是:将模式串P的hash值跟主串S中的每一个长度为|P|的子串的hash值比较。如果不同,则它们肯定不相等;如果相同,则再诸位比较之。2,RK算法的
2014-03-04 20:04:28
515
原创 建堆的时间复杂度计算
现在常有两种建堆的方法,而这两种方法又有着不同的时间复杂度。下面分别陈述:(1)自顶向下的建堆方式这种建堆的方法具有O(n*log2n)的时间复杂度。从根结点开始,然后一个一个的把结点插入堆中。当把一个新的结点插入堆中时,需要对结点进行调整,以保证插入结点后的堆依然是大根堆。如下图所示,是采用自顶向下的方法建立的大根堆。其中h = log2(n+1)-1,第k层结点个数为2
2014-03-04 15:09:55
24750
3
转载 哈希表
最近我在做一个项目,其中要用到一个数据结构——Hash Table(哈希表),以前只有理论知识,现在实却发现很不简单,所以写下来和大家共分享。我们知道,哈希表是一个固定大小的数组,数组的每个元素是一个链表(单向或双向)的头指针。如果Key一样,则在一起,如果Key不一样,则不在一起。哈希表的查询是飞快的。因为它不需要从头搜索,它利用Key的“哈希算法”直接定位,查找非常快,各种数据库中的数
2014-02-28 15:44:37
389
转载 Robberies
RobberiesTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4852 Accepted Submission(s): 1844Problem DescriptionThe aspiring
2014-02-25 19:55:18
418
转载 回溯法
如果上期的“百钱买百鸡”中鸡的种类数是变化的,用枚举法就无能为力了,这里介绍另一种算法——回溯法。 回溯法是一种既带有系统性又带有跳跃性的搜索法,它的基本思想是:在搜索过程中,当探索到某一步时,发现原先的选择达不到目标,就退回到上一步重新选择。它主要用来解决一些要经过许多步骤才能完成的,而每个步骤都有若干种可能的分支,为了完成这一过程,需要遵守某些规则,但这些规则又无法用数学公式来描
2014-02-23 21:40:12
370
转载 最好使用C++转型操作符
来源:http://www.cnblogs.com/hazir/archive/2012/04/14/2447251.html旧式的C转型方式,几乎允许你将任何类型转换为任何其它类型,有其自身的缺陷,表现在以下两方面:不能更精确地指明其转型的意图。如将一个pointer-to-base-class-object 转型为一个pointer-to-derived
2014-02-20 22:32:51
383
原创 Effective C++读书笔记(16)
条款25:考虑写出一个不抛出异常的swap函数swap函数是异常安全性编程的脊柱,以及用来处理自我赋值可能性的一个常见机制。缺省情况下,swap动作可由标准程序库提供的swap算法完成。(对象需要支持copying函数)namespace std{template void swap(T& a, T& b){ T temp(a); a = b;
2014-02-20 21:36:00
402
转载 Argument Dependent Lookup (ADL, a.k.a. Koenig Lookup) 解析
来源:http://hi.baidu.com/lovelink/item/cc6ca9e0183224accf2d4facADL,参数相关查找,也称作为Koenig查找(以Andrew Koenig的名字命名,有兴趣可以看Scott Meyer的文章The Most Important C++ People...Ever),是指在编译器对无限定域的函数调用进行名字查找时,所应用
2014-02-20 20:59:37
473
原创 Effective C++读书笔记(15)
条款23:宁以non-member、non-friend替换member函数对类里面的便利函数(不是完成某一特定功能,只是通过调用其他方法整合方法)在既可以选择成为member函数和non-member、non-friend函数的时候一般定义为non-member、non-friend函数更合理。因为member函数比non-member、non-friend函数的封装性差(因为member函
2014-02-18 20:12:21
502
原创 Effective C++读书笔记(14)
条款21:必须返回对象时,别妄想返回其reference当函数要返回一个对象时,不要返回pointer或者reference指向local stack对象,会返回一个未定义的pointer或reference;也不要返回reference指向一个heap-allocated对象,会造成内存泄露;也不要返回pointer或者reference指向local static对象,在需要多个对象时会造
2014-02-18 17:46:19
436
原创 Effective C++读书笔记(13)
条款19:设计class犹如设计typeclass的设计规范:1、新type的对象应该如何被创建和销毁?2、对象的初始化和对象的赋值该有什么样的区别?3、新type的对象如果被passed by value,意味着什么?(copy构造函数)4、什么是新type的“合法值”?5、你的新type需要配合某个继承图系么?6、你的新type需要什么样的转换?7、什么样的操作符和函数对此新type而言是
2014-02-18 15:30:14
423
转载 cross-dll和智能指针
来源:http://flintning.blog.sohu.com/117761263.html最近在做一个项目,存在大量的模块(exe或dll)间数据传递,希望避免频繁的数据复制降低处理效率,即一个模块创建的数据指针可以直接传递给另一个模块。首先考虑的就是所谓的cross-dll问题,即一个模块分配的内存不应该由另一个模块释放,因为两个模块可能使用不同版本的C运行期库,甚至不
2014-02-18 11:35:43
1396
原创 Effective C++读书笔记(12)
条款18:让接口容易被正确使用,不易被误用欲开发一个“容易被正确使用,不容易被误用”的接口,首先必须考虑客户可能做出什么样的错误。1、许多用户会出现对接口所传实参不对应或者取值范围有问题的错误。这些错误可以因为导入新类型而获得预防,可以通过简单地外覆类型来区别参数类型。(用成熟且经过充分锻炼的classes并封装其内数据比简单使用structs好)对于限制取值范围常见有两种方法:1、利
2014-02-18 11:34:52
404
原创 Effective C++读书笔记(11)
条款15:在资源管理类中提供对原始资源的访问资源管理类需要一个函数可以将RAII class对象转移到其所包含的原始资源,可以通过显式转换或隐式转换完成。显式转换:常在RAII class中定义一个get成员函数,用于返回RAII class内部的原始资源。也可以通过重载*或者->运算符。隐式转换:重载类型转换运算符。条款16:成对使用new和delete时要采取相同形式
2014-02-17 21:46:19
403
转载 重载类型转换操作符 遇到的问题
原文链接:http://www.cnblogs.com/chinazhangjie/archive/2010/08/19/1803049.html今天我对这段代码产生了质疑:operator double (){ return static_cast (sum) /static_ca
2014-02-17 21:20:02
381
原创 Effective C++读书笔记(10)
条款14:在资源管理类中小心copying行为并非所有资源都是heap-base,这些资源不适合直接应用智能指针作为资源管理类。需要建立自己的资源管理类。例如:处理类型为Mutex的互斥器对象,共有lock和unlock两个函数可用:void lock(Mutex* pm);void unlock(Mutex* pm);我们建立对应资源管理类控制互斥器的锁定和解锁。class Loc
2014-02-17 20:40:31
394
原创 Effective C++读书笔记(9)
条款13:以对象管理资源将动态分配的资源放进对象内,成为对象的成员变量,我们便可以依赖于C++的析构函数自动调用机制确保资源被释放。智能指针:用智能指针可以有效缓解C++的内存回收问题:C++没有自动内存回收机制,每次new出来的堆内存都要手动delete(std中的auto_ptr即是智能指针)。对于编译器来说,智能指针实际是一个栈对象,并非指针类型,在栈对象生命期即将结束时,智
2014-02-17 19:15:12
373
原创 Effective C++读书笔记(8)
条款10:令operator=返回一个reference to *this为了实现连锁赋值,赋值操作符必须返回一个reference指向操作符的左侧实参。条款11:在operator=中处理“自我赋值”对于赋值操作符应能实现对象的自我赋值。否则会造成“在停止使用资源之前意外释放了它”。常见的解决方案有三种:1、赋值之前进行证同测试,比较“源对象”和“目标对象”的地址。if(th
2014-02-17 15:52:47
403
转载 气象站的故事-观察者模式
气象站的故事-观察者模式前言大家好!好久没有更新这个系列的文章了,这两个来月回家过了新年,公司搬了新家,就是这个系列的文章还没有更新,实在惭愧!同时再次真诚地感谢一直喜欢和支持这个系列文章的朋友们,因为你们的鼓励,我才有动力继续下去。可能因为这个系列每篇文章都比较长的原因,为了保证质量我总是字斟句酌,所以每次想动笔的时候都有点胆怯的感觉,但是还好每次只要写了开头我就会坚持把它写完的,还是万
2014-02-15 17:22:10
453
转载 鸭子-策略模式(Strategy)
鸭子-策略模式(Strategy)前言万事开头难,最近对这句话体会深刻!这篇文章是这个系列正式开始介绍设计模式的第一篇,所以肩负着确定这个系列风格的历史重任,它在我脑袋里默默地酝酿了好多天,却只搜刮出了一点儿不太清晰的轮廓,可是时间不等人,以后再多“迭代”几次吧!在前面的随笔里,我已经提到了,这个系列准备以《Head First Design Patterns》的结构为主线,所以每个模式的
2014-02-15 17:09:27
428
转载 设计模式随笔系列:开篇-模式和原则
开篇-模式和原则前言正式接触使用设计模式近两年了,一直想写点东西来巩固所学,但是迟迟没有动作,总想时间和见识再多一些的时候再动笔,但是拖得越久越感觉合适的时机永远不会有,只有不断实践才能换来进步,也许再不写就永远也写不出来了,于是我终于开始了。谈到设计模式,应该还没有人能超越GOF的开山之作,所以谈不上什么创新,归根结底还是重复前人的论述和思想,更多的只能是整理和个人的一些心得体会。因
2014-02-15 16:41:30
383
原创 Effective C++读书笔记(7)
条款8:别让异常逃离析构函数在两个异常同时存在的情况下,程序若不是结束执行就是导致不明确行为。析构函数绝对不要吐出异常,如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,常见处理方法有:1、如果抛出异常就结束程序。2、吞下异常,并记录下其记录。一种更加合理的方法是将这个异常放在来自析构函数以外的某个函数中去,并将其给程序员去调用,一次同时析构函数内仍包含一个”双保险“
2014-02-15 15:41:01
391
原创 Effective C++读书笔记(6)
条款7:为多态基类声明virtual析构函数栈空间和堆空间:一个由C/C++编译的程序占用的内存主要分为以下几个部分:1:栈区(stack):编译器自动分配释放,存放函数的参数值、局部变量的值等,其操作方式类似于数据结构的栈。2:堆区(heap):一般是由程序员分配释放,若程序员不释放的话,程序结束时可能由OS回收,分配方式类似于链表。3:全局区(static):存储全局变量和静态变量,初
2014-02-15 12:47:11
399
原创 Effective C++读书笔记(5)
条款5:了解C++默默编写并调用哪些函数默认的函数包括:构造函数、copy构造函数、copy赋值运算符和析构函数,所有这些函数都是public且inline。这些函数仅当被调用的时候才会被编译器创建出来。除非这个class的base class自身声明有virtual析构函数,则这个class的析构函数是non-virtual的。default copy赋值运算符在遇到引用成员变量或c
2014-02-14 16:50:52
381
转载 尽量不要使用#define,而是用const、enum、inline替换。
为什么这么说呢?或许很多程序员已经习惯在文件开始使用大量的#define语句。例如:这里程序文件开头有如下#define语句 #define N 10 #define PI 3.14 #define MAX
2014-02-14 14:46:10
475
转载 Mysql中文乱码问题完美解决方案
MySQL会出现中文乱码的原因不外乎下列几点:1.server本身设定问题,例如还停留在latin12.table的语系设定问题(包含character与collation)3.客户端程式(例如php)的连线语系设定问题强烈建议使用utf8!!!!utf8可以兼容世界上所有字符!!!!一、避免创建数据库及表出现中文乱码和查看编码方法1、创建数据库的时候:CREATE D
2014-01-08 15:18:51
330
原创 Effective C++读书笔记(4)
条款4:确定对象在被使用前已被初始化永远在使用对象前现将其初始化(1.对于无成员的内置类型必须手工完成初始化,2.对于自定义类型交给构造函数(每个构造函数都将对象的每个成员初始化))在构造函数内对各成员进行赋值的操作叫做赋值。对象的成员变量的初始化动作在进入构造函数本体之前,即各成员的default构造函数被调用时(除内置类型)。使用构造函数的成员初值列进行初始化更为高效,并且在初值列
2014-01-04 19:37:59
411
原创 Effective C++读书笔记(3)
条款3: 尽可能使用const在全局作用域内定义的非const变量默认为extern,而要在别的文件中使用const变量,必须显式的声明为extern。声明iterator为const(const vector::iterator)等同于T* const,表示迭代器不能够移动,要表示迭代器所指向的值不能变化时用const_iterator。在一个函数声明式中,const可以和返回值、各
2014-01-04 19:08:26
341
原创 Effective C++读书笔记(2)
让自己习惯C++条款1:视C++为一个语言联邦C++可以看作是四种次语言组成的:C(包括区块、语句、预处理器、内置数据类型、数组、指针等);Object-Oriented C++(主要表现C++的面对对象的性质,包括类、封装、继承、多态性、virtual函数等);Template C++(为C++泛型编程部分);STL(是模版程序库,主要包括容器、迭代器、算法以及函数对象)
2013-12-16 15:48:09
422
原创 Effective C++读书笔记(1)
导读1.定义式是编译器对此对象拨发内存的地点。2.explicit声明的构造函数可被用于禁止编译器执行非预期的类型转换。注:对于单个参数的构造函数定义了从该形参类型到该类型的一个隐形转换。explicit只对构造函数起作用,用来抑制隐式转换。 class A { A(int a); }; int Functio
2013-12-16 14:57:56
344
转载 隐式类类型转换
C++ primer 中有这么一句话:可以用单个实参来调用的构造函数定义了从形参类型到该类型的一个隐式转换。这么解释:比如有个类A的对象a的成员函数的参数应该是类A的对象,但是把一个别的类型B的对象b传进去了,而且这个对象b的类型恰好是A的单参数构造函数参数类型,这时系统就用这个b自作聪明的创建了一个类A的临时对象c,虽然c和a都是A类型,但是是不同的对象。这种隐式转换有很大风险,可以
2013-12-13 11:09:08
392
转载 VS08SP1中CMFCPropertyGridCtrl的基本用法
在DLG中的基本应用 。首先在Cxxdlg.h文件中加入public: CMFCPropertyGridCtrl m_MFCPGCtrl; CMFCPropertyGridProperty* pGroup1; CMFCPropertyGridProperty* pGroup2; 然后Cxxdlg.cpp中的OnInitDialog()中CRec
2013-12-04 16:28:19
556
转载 opncv2.4.3 SIFT编译出错
今天在opencv2.4.3下写SIFT检测时,遇到了下面这个问题: 1>Lab.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall cv::SIFT::SIFT(int,int,double,double,double)" (??0SIFT@cv@@QAE@HHNNN@Z),该符号在函数_main 中被引用1>F:\
2013-12-04 15:00:27
674
转载 JPEG2000和JPEG的比较
在有损压缩下,JPEG2000一个比较明显的优点就是没有JPEG压缩中的马赛克失真效果。JPEG2000的失真主要是模糊失真。模糊失真产生的主要原因是在编码过程中高频量一定程度的衰减。传统的JPEG压缩也存在模糊失真的问题。 就图像整体压缩性能来说,目前有一些文章可能夸大JPEG2000的性能。事实上,在低压缩比情形下(比如压缩比小于10:1),传统的JPEG图像质量有可能要比JPEG2000
2013-11-20 21:02:45
15526
转载 JPEG压缩原理
本文介绍JPEG压缩技术的原理,对于DCT变换、Zig-Zag扫描和Huffman编码,给出一个较为清晰的框架。1. JPEG压缩的编解码互逆过程:编码解码2. 具体过程:(这里仅以编码为例,解码过程为其逆过程) A.
2013-11-20 20:51:59
747
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人