摘要: 酷壳上的两篇文章,转载至此,学好C和C++。我相信,这可能是很多朋友的问题,我以前也有这样的感觉,编程编到一定的时候,发现能力到了瓶颈,既不深,也不扎实,半吊子。比如:你长期地使用Java和.NET ,这些有虚拟机的语言对于开发便利是便利,但是对于程序员来说可能并不太好,原因有两个:虚拟机屏蔽了操作系统的系统调用,以及很多底层机制。大量的封装好的类库也屏蔽了很多实现细节。一段时间后,你会发现你知其然,不知所以然。。我以前在CSDN上写过一篇《Java NIO类库Selector机制解析(上,下,续)》,在那篇文章中我说提到过(有讥讽的语气)Java的程序员不懂底层实现,所以很难把技术学得更扎实 阅读全文
posted @ 2013-11-19 19:14 Little_T 阅读(1608) 评论(0) 推荐(1) 编辑
摘要: 常见的字符串匹配算法中,KMP算法是比较难懂的一个,其中的思想和实现的方法也有很多种,下面介绍一种适用比较广的情况: 1 #include 2 #include 3 using namespace std; 4 5 int KMP_Match(const string &target, const string &pattern) { 6 //计算匹配串的“部分匹配表”jump[] 7 const int pLength = pattern.length(); 8 vector jump(pLength); 9 10 jump[0] = -1;... 阅读全文
posted @ 2013-10-11 11:50 Little_T 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 今天看到一个求结构体偏移量的题目,可以使用宏来求解,觉得很是新奇,继续深入考虑到结构体字节对齐问题。参考网上的内容,对齐的规则有如下两条:第一个数据成员从offset=0的地址开始放,以后的数据成员存放的起始位置要么为本数据大小的整数倍要么为其体内所含子成员大小的整数倍。结构体的sizeof得到的大小肯定为其内部最大成员的大小的整数倍;网上有说结构体内有子结构体时,子结构体的开始位置应该为其内部最大数据成员大小的整数倍,经实验,不符合此条。同时可以使用#pragma pack(n),来改变对齐的大小,一般都设置为1,2,4。默认的值和机器字长有关。 1 #include 2 #include. 阅读全文
posted @ 2013-09-29 21:23 Little_T 阅读(523) 评论(0) 推荐(0) 编辑
摘要: 这次介绍经常在面试中被问到的单向链表的反转问题,问题的解决方法有多种最普通的是从头到尾扫描链表,然后对链表进行反转。使用单个参数的递归方法;使用单个参数是相当于不断的往链表后部深入,并且在每次深入的递归中保存了下一个节点和当前节点的信息,再调用递归后处理当前节点和下一个节点的关系;其中比较有特点的处理过程是返回值的处理,每次递归后返回的指针为同一个;使用两个参数的递归方法,外加一个当前链表头节点的前一个结点的指针,在进一步递归之前处理好头节点和其前一个节点的关系。 1 #include 2 #include 3 using namespace std; 4 struct Node{ 5 ... 阅读全文
posted @ 2013-09-29 20:32 Little_T 阅读(9200) 评论(1) 推荐(2) 编辑
摘要: 不久前发现陈皓的blog -- 酷壳,闲暇之余看看,学到不少东西,感觉作为一个程序员自己才刚开始也还有很长的路需要去走。真后悔本科到研究生的6年间看书不够,那只有从现在起不断的学习。最近有李开复老师得癌症的消息让我很震惊,李老师一直是我心中的偶像,看来在学习之余也要好好锻炼身体,明天是教师节,祝李老师早日康复。下面转载一篇酷壳中c++学习的文章,自己参考这些文章学习,也让大家一个了解的机会。原文链接:http://coolshell.cn/articles/4119.html昨天写了一篇如何学好C语言,就有人回复问我如何学好C++,所以,我把我个人的一些学习经验写在这里,希望对大家有用。首.. 阅读全文
posted @ 2013-09-09 20:24 Little_T 阅读(388) 评论(0) 推荐(0) 编辑
摘要: 最近在研究Ubuntu,收集了一些常见命令,汇总在一起给大家参考,如有错误,请指正。基本机器操作命令:shutdown -h now 现在马上关机shutdown -r now 现在重新启动reboot 现在重新启动su - 如果当前是普通用户,则输入这条命令切换到管理员用户(root),如果要切换到其他用户则敲入 su - 用户名 如: su - shenlianglogout 从当前用户注销(如果是在图形界面的终端的话,则是输入 exit 命令来退出当前用户)cd 切换目录【如:cd / 表示切换到linux的根目录!!(/)表示根目录】pwd ... 阅读全文
posted @ 2013-09-08 19:17 Little_T 阅读(705) 评论(0) 推荐(0) 编辑
摘要: 这两天在研究C/C++的函数指针,找到一篇讲解比较详细的博客,内容有点多,但是讲解得比较详细,适合初学者。特转之:1.无处不见的函数指针使用函数指针可以设计出更优雅的程序,比如设计一个集群的通信框架的底层通信系统:首先将要每个消息的对应处理函数的指针保存映射表中(使用STL的map,键是消息的标志,值是对应的函数指针),然后启动一个线程在结点上的某个端口侦听,收到消息后,根据消息的编号,从映射表中找到对应的函数入口,将消息体数据作为参数传给相应的函数。我曾看过lam-mpi在启动集群中每个结点的进程时的实现,该模块的最上层就是一个结构体,这个结构体中仅是由函数指针构成,每个函数指针都指向一个子 阅读全文
posted @ 2013-07-08 09:01 Little_T 阅读(1261) 评论(0) 推荐(0) 编辑
摘要: 前言C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家一个清晰的剖析。当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片, 阅读全文
posted @ 2013-05-04 21:22 Little_T 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 归并排序具有递归和非递归两种方式:递归的归并排序代码如下: 1 #include <iostream> 2 #include <list> 3 #include <stack> 4 using namespace std; 5 //合并排序的前期判断,将不符合归并排序的数组进行筛除, 6 //申请归并排序的辅助数组空间 7 void MergeSort(int *p, int n) 8 { 9 void Msort(int *p, int *temp,int left, int right);10 if(n <= 0 || p == NULL)11 r 阅读全文
posted @ 2013-05-04 19:29 Little_T 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 源文件地址:http://hi.baidu.com/liyuan90315/blog/item/4e1720ee44404f2e2df534cf.html问题描述给定参数n(n为正整数),请计算n的阶乘n!末尾所含有“0”的个数。例如,5!=120,其末尾所含有的“0”的个数为1;10!= 3628800,其末尾所含有的“0”的个数为2;20!= 2432902008176640000,其末尾所含有的“0”的个数为4。计算公式这里先给出其计算公式,后面给出推导过程。令f(x)表示正整数x末尾所含有的“0”的个数,则有: 当0 < n < 5时,f(n!) = 0; 当n >= 阅读全文
posted @ 2012-08-09 21:15 Little_T 阅读(644) 评论(0) 推荐(1) 编辑