代码改变世界

随笔档案-2011年04月

C++的new为什么那么"新"?

2011-04-25 14:55 by Aga.J, 420 阅读, 收藏,
摘要: 转自http://www.builder.com.cn/2008/0104/696370.shtml(它也是转的。。)“new”是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘,下面我将把我了解到的与new有关的内容做一个总结。new的过程当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。假如我们定义了如下一个类A:class A { int i; public: A(int _i) :i(_i*_i) {} void Say( 阅读全文

C++中include头文件到底会发生什么事?

2011-04-24 20:50 by Aga.J, 692 阅读, 收藏,
摘要: 当xx.c文件在被编译的时候,第一步要做的就是预处理,而我们知道预处理会处理宏定义,条件编译,和头文件。但是到底是如何处理头文件的呢?预处理的最终结果可以看做是把头文件中的所有内容都放到xx.c文件中(当然这个是个递归过程)。这样一来,编译会花费更加长的时间,因为在编译器最终分析final.c的文件中的词法和语法时,它需要从头到尾一行一行的处理,所以xx.c文件中的真正需要执行的代码,可能需要经过很多行无效的处理后才到达。这样也提示我们不要随便将c文件需要的头文件include放在其对应的h文件中,这样会使得其他c文件include该h文件时带来不必要的开销。 更加详细的内容,请看这个博客h. 阅读全文

字符串匹配算法之Sunday算法的学习笔记

2011-04-24 19:56 by Aga.J, 1910 阅读, 收藏,
摘要: Sunday算法是一种比KMP和BM更加高效的匹配算法,它的思想跟BM算法相似,在匹配进行时,Sunday算法失败时关注的是源字符串中当前参加匹配的长度为M(模式串的长度)的最后一位字符的下一个字符。如果该字符不在模式串中出现,那么就将直接跳过,即移动步长=模式串的长度+1,否则,则移动步长=模式串中最右端的该字符到末尾的距离加1。 假设我们要匹配”HERE IS A SIMPLE EXAMPLE”和”EXAMPLE” Text: HERE IS A SIMPLE EXAMPLE Pattern:EXAMPLE 我们从源串的初始位置开始和模式串比较,发现第一个就不匹配了,这时候如果使用. 阅读全文

平衡二叉树之AVL树的学习比较

2011-04-19 12:01 by Aga.J, 1159 阅读, 收藏,
摘要: 平衡二叉树(这里就不解释了):给予不同的平衡条件,造就出不同的效率表现,以及不同的实现复杂度,AVL ,RB, AA都是一种平衡二叉树,因为维护平衡,所以插入和删除节点的平均时间长了,但是可以避免不平衡的情况,所以元素的搜寻访问时间短了!而最直观的平衡条件是整棵树的深度为logN,也就是说要求每个节点的左右子树有相同的高度(递归定义的结果就是该树的叶子节点都在同一层上!) 接下来是AVL树 : AVL树,原名是Adelson-Velskii-Landis tree,它没有像上述那个条件要求那么苛刻,它允许任何节点的左右子树的高度相差1,(递归定义的结构就是该树的叶子节点只可以在最后一层和倒数. 阅读全文

字符串匹配算法Rabin-Karp 算法的学习笔记

2011-04-16 22:11 by Aga.J, 1031 阅读, 收藏,
摘要: 该算法的思想是,通过对模式字符串进行hash运算,同时对源字符串取长度跟模式字符串相等的子字符串也进行hash运算,最后比较hash值来确定模式字符串是否和源字符串的子串匹配,并获得其匹配起始位置。 什么叫做hash运算呢?把串看作是字符集(这个串中的字符是属于某个字符集的)长度进制的数(比如数字串'’123”的字符集就是0到9,属于10进制,将数字串转换为相应的10进制数进行比较),由“数”的比较得出字符串的比较结果。例如,给定字符集为∑ ={0,1,2,3,4,5,6,7,8,9} ,∑长度为 d=10 ,那么任何以∑为字符集的串都可看作 d (此处为 10 )进制的数。 设模式串 阅读全文

最长公共子串算法的学习笔记

2011-04-16 20:01 by Aga.J, 453 阅读, 收藏,
摘要: Longest Common Subsequence最长公共子串算法原理:1 将两个字符串分别以行和列组成矩阵2 计算每个节点的行和列的字符是否相同,如果相同则为13 通过找出值为1的最长对角线就可以得到最长公共子串(在第3步中可以这样优化算法,就是把相同字符所在的位置的值加上左上角d[i-1][j-1]的值,这样就可以获得最长公共子串的长度,更可以得到公共子串是什么)这个算法的原理很浅显易懂,很快理解为什么可以这样做,所以这里就不赘述了。直接贴出来自网络的参考代码。public static string LCS(string s1,string s2){if(s1==s2)return s 阅读全文

字符串相似度算法《Levenshtein Distance》的学习笔记

2011-04-16 00:51 by Aga.J, 3240 阅读, 收藏,
摘要: 今天在这个博客中http://www.cppblog.com/whncpp/archive/2008/09/21/62378.html看到了这样的一个问题: 一个字符串可以通过“增加一个字符”,“删除一个字符”,“替换一个字符”,从而得到另一个字符串,假设我们从字符串A转换为字符串B,前面3种操作所执行的最少次数就是A和B的相似度。求该最小次数。 如 abc adc 度为 1 ababababa babababab 度为 2 abcd acdb 度为2 那是相当有趣啊,哈哈,博客中介绍了这个问题最常用的解决算法--Levenshtein Distance,下面就来介绍下这个算法如何来解决这个. 阅读全文

分治算法的学习笔记

2011-04-14 00:22 by Aga.J, 704 阅读, 收藏,
摘要: 分治算法一个简单的可以利用分治思想来解决的问题是在一个一维数组中找到最大值和最小值,最暴力的做法就是分两次完成,第一次从数组中找到最大值,第二次从数组中找到最小值。这种方法并不高效,比较次数多,而原因是 在选择最大值,最小值的时候是“孤立”的进行的,并不利用上次比较的信息【重点,利用上次比较的信息!】。使用分治法可以避免这个缺点。算法实现如下:Void getMaxAndMin(int list[],int &max, int &min, int low, int high) //low,high是分治的必须{If(low == high ) { max= list[low]; 阅读全文

我脑子里都是good idea

2011-04-13 13:08 by Aga.J, 284 阅读, 收藏,
摘要: 自从第一次接触移动开发,我就对这种平台开发产生了极大的热情,为什么呢?因为借助这个小巧的移动设备,我可以做到很多很多平时在pc上做不到的事,我可以想到许多有创意的idea,移动设备上,有GPS定位可以玩,有摄像头可以玩,有语音可以玩,有随身游戏可以玩,有随身音乐可以玩,有随身办公软件可以玩,种种创意都依赖于移动设备的移动性,小巧性。(当时的这种感觉也被现在移动应用开发很火的事实证明了。) 我第一次接触的移动平台是windows mobile,而在学习开发过程中我无意发现了windows mobile 6.5的DTK提供了“手势”api,而这个手势api就让我有了我第一个应用程序的idea,做. 阅读全文

TouchStudio for WP7!!我也想过这种东西啊!

2011-04-12 23:04 by Aga.J, 518 阅读, 收藏,
摘要: [视频]手机上编程!TouchStudio for WP7发布2011-04-12 15:03作者:Jean Wong出处:天极网软件频道责任编辑:王健 微软正努力地在智能手机市场上演绎创新! 在Mix 2011大会上,微软正式发布了 TouchStudio for Windows Phone 7。简而言之,TouchStudio将允许开发人员在自己的WP手机上开发应用程序,如编写变量、声明、使用API操控手机……微软研究小组创建 TouchStudio 时的理念相当简单:在移动设备上编写和执行程序,无须其他电脑。 在下面的一段视频中,来自微软研究院软件工程组(RiSE)的 Nikolai T 阅读全文

STL源码剖析之迭代器概念与traits编程技巧--学习笔记

2011-04-12 10:08 by Aga.J, 550 阅读, 收藏,
摘要: 15 Iterator是一种抽象的设计概念:design pattern中有一种iterator的模式: 提供一种外部方法,使之可以依序访问聚合器所含的各个元素,而又无需暴露该聚合物的内部表述方式(也就是说做到和聚合物的类型无关);STL的中心思想: 将数据容器和算法分开,彼此独立设计,最后使用粘合剂将他们粘合起来。要做到 容器的泛型化我们可以借助class template,要做到 算法的泛型化,我们可以借助 function template。而他们之间的交合,就需要细致考虑。下面是三者之间完美结合的例子Template<class InputIterator, class T> 阅读全文

KMP算法的学习笔记

2011-04-12 01:29 by Aga.J, 440 阅读, 收藏,
摘要: 串的模式匹配问题:从主串中找到子串第一次出现的位置解决:1) Brute-Force算法最简单的算法就是将子串的第一个字符与主串的第一个字符比较,如果匹配,则比较两者的下一个字符,如果失败,则将子串的第一个字符和主串的第一个比较字符的下一个字符进行比较,重复上述操作,直到子串匹配完成或者结束。最好情况下,只需要m次比较(m为子串长度)即可完成。当子串的第0个字符和主串的每一个字符都不同的,比较次数为n-m+1,而当每次匹配时,子串前面的所有字符都和主串的相应字符相同,但是最后一个字符不同,这样一来就需要比较(n-m+1)*m次,因为每次匹配失败可以看做是【当子串的第0个字符和主串的每一个字符都 阅读全文

STL源码剖析之开篇与内存配置器--学习笔记

2011-04-09 13:47 by Aga.J, 859 阅读, 收藏,
摘要: 1 从底层来看,STL带给我们一套具有实用价值的零部件,以及一个整合起来的整体,STL中组件之间耦合度很低,组件之间可以互相关联整合。2 STL以泛型思维,描述了很多抽象概念,以抽象概念为主体而不是依赖于实际的类3 STL六大组件:容器 : 数据结构(容纳数据)是一种class template算法 : 常用的算法,是一种function template迭代器:容器和算法之间的胶合剂,也是一种泛型组件,“泛型指针”,每个容器都有自己的迭代器,只有容器自己才知道如何使用自己的迭代器来完成迭代。仿函数:??适配器:修饰容器或者仿函数或者迭代器接口的东西,也就是改变了被适配的东西,提供了新的接口。 阅读全文

给大家分享一个在Windows下批量下载Android源码的方法

2011-04-09 00:56 by Aga.J, 965 阅读, 收藏,
摘要: 首先要万分感谢哈哈镜中缘的专栏为我们贡献这个方法和相关工具,大致的过程是这样的,从GIT开源的分布式版本控制系统上下载android的系统源码(最近又有几份大型源码被搬迁到GIT上了,大家有没有留意新闻),然后使用git工具可以从站点上下载源码,而在linux上可以支持批量下载,windows的话就要感谢哈哈镜中缘的专栏的共享了,大家可以去看看他的这篇文章《http://blog.csdn.net/waji2000/archive/2009/08/01/4399611.aspx》。 然后就是题外话,说说其他我收集到的东东: 解压android sdk中的android.jar,大家可以看到好. 阅读全文

移动应用开发工程师之死

2011-04-07 17:01 by Aga.J, 286 阅读, 收藏,
摘要: -0 - 题目取得有点大了,见谅。。前一周,去了两场实习笔试面试,第一场面试因为我虽然做了很多移动开发,但是人家要android和iphone,我主攻的平台却是wm,想不到我年纪这么小就体验到技术落后被淘汰的感觉,现在我该开始学android和iphone吗?从那天后我产生了这个想法。第二场面试因为人家要的是底层方面的高手,如C++和算法,我又被刷了。。现在我该开始学C++和算法吗?从那天后我又产生一个想法。 经过几天的挣扎,我决定一条路就黑到底了,哥学android和iphone吧,当然C++和算法是我个人修养的必须(现在才发现。。-0 - 悲剧)。 先说说android我打算怎么学吧,首. 阅读全文