- 博客(15)
- 收藏
- 关注
原创 虚函数
1.虚函数在类内部声明,形式为:virtual (形参列表)虚函数的声明比普通函数多一个virtual,公有派生类中可以省略virtual关键字,派生类中重写虚函数,必须要求返回值类型形参列表一致,否则会发生同名覆盖。派生类只有在公有继承的方式继承基类时,才会有虚函数的正常使用。使用虚函数的例子:# include using namespace std;# include
2014-04-27 21:52:03 894
原创 整型溢出
1.当数据超出了类型的最值或者有符号数被解析成无符号数时,可能会发生溢出。整型溢出的形式有:1.存储溢出2.运算溢出3.符号导致的溢出对于存储溢出,加入int m=0x1000;char n=m;printf(“%d\n”,n) 结果会输出0,因为m占据4个字节的存储空间,而n占有一个,m赋值给n时,仅仅把最低字节给了n。对于运算溢出,假如unsignedchar a=255;unsigne
2014-04-27 09:02:54 4453
原创 重复出现的字符串
题目:给定一个字符串,求字符串中长度大于3的重复出现的子串。如“abcdeabcdfg”,长度大于3且重复出现的子串为abcd.解:使用后缀数组,把字符串的后缀进行排序,然后逐个比较相邻两个后缀,如果共同的长度大于3,则输出这个子串。# include # include # include int main(){ int com(char a[],char b[]); voi
2014-04-26 22:50:54 874
原创 最长公共子序列
给定两个序列X=和Y=,求X和Y长度最长的公共子序列。可以用动态规划的方法解决这个问题,建立数组c[i][j],i和j分别表示Xi 和Yj的的LCS长度,如果i=0,j=0,c[i][j]=0,根据最优子结构的性质,得到问题的递推公式为:
2014-04-26 22:48:18 923
原创 C++的内存分类
1.C++中的内存分为五大区域:(1) 栈 存放局部变量,函数形参 调用函数式系统会自动分配一个栈(2) 堆 存放由new存放的内存块,如果没有使用delete及时清理,会造成内存泄露(3) 自由存储区 存放由malloc申请的内存块,(4) 全局变量/静态变量区 存放全局变量静态变量(5) 常量区 存放整
2014-04-19 23:00:43 947
原创 递归函数的汇编表示
写入程序test.c:# include int fun(int n){if (n==0)return 0;if(n==1)return 1;elsereturn n+fun(n-1);}int main(){fun(4);return 0;}使用gcc –g test.c产生调试信息,使用gdb调试程序,反汇编后得到汇编代码(fun函数):(gdb) di
2014-04-13 11:24:52 2049
原创 字符串匹配
面试题:给一串很长的字符串,要求找到符合要求的字符串,例如目的串:”123”“1****3***2”,”12*****3”这些都要找出来思路一:利用两层循环,逐个查找目的串中的字符,比如先查找字符’1’是否在长字符串中,再查找’2’是否在长字符串中,直到目的串遇到’\0’代码是:# include # include # include int main(){ int
2014-04-12 13:55:31 897
原创 windows环境下使用gcc
windows环境下使用gccMinGw是Minimal GNU on Windows的缩写,允许在GNU/linux和windows平台生成本地的windows程序而不需要第三方运行时库。本文主要介绍MinGw的安装和使用。 (一)安装1. 下载min-gw安装程序,链接为:http://sourceforge.net/projects/mingw/files/,下载Do
2014-04-12 12:52:46 8206 6
转载 gdb常用命令
一、GDB常用命令简介 rrun运行.程序还没有运行前使用c cuntinue 运行到下一断点处qquit 退出tabtab命令补全功能h help帮助sstep跟入函数nnext
2014-04-12 12:19:18 854
原创 字节对齐
数据对齐的目的是提高CPU读取元素的速度,有些CPU读取元素是从偶数地址开始的,这时如果一个int型的数据存放在起始地址为奇数的地方,这时将需要读取两次,然后将两次读取的结果合并到一起,显然这种方式低效的。改进的办法是让各种数据类型数据对齐,虽然这样增加了一些空间的开销,但它提高了CPU读取元素的效率。
2014-04-07 22:58:41 1034
原创 switch...case和if...else效率比较
1.switch的汇编表示写入switch的代码:int fun(char c) { char res; switch(c) { case 'a': res='a'; break; case 'e': res='e'; break; case 'i': res='i'; br
2014-04-07 17:28:49 13540 2
原创 找数组中最小的k个元素
求数组最小的k个元素,方法有很多,这里仅列举几种1. 使用排序的方法,排序可以选用复杂度较低的快速排序,时间复杂度为O(n*logn),也可以使用线性时间排序,但这时需要O(N)的空间复杂度。下面是使用快速排序求得最小的k个元素的方法。# include using namespace std;# include int cmp(const void* a,const voi
2014-04-07 12:03:51 1302
原创 字符串的反转
1.反转字符串例:hello world 变为 dlrow olleh程序为:# include using namespace std;# include int main(){ void reverse(char *s); char a[20]="hello world"; reverse(a); cout<<a<<endl; reverseword(a); c
2014-04-07 09:30:05 1068
原创 判断两个链表是否相交
判断两个链表是否相交,《编程之美》给出了以下方法:1.判断第一个链表的每个节点是否在第二个链表中,这种方法的时间复杂度为:O(length(h1)*length(h2)),这种方法很耗时间2.利用计数的方法 一个简单的做法是对第一个链表的结点地址进行hash排序,建立hash表,然后针对第二个链表的每个节点的地址查询hash表,如果它在哈希表中出现,那么说明第二个链表和第一个链表有共同的结
2014-04-06 17:18:38 1294
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人