- 博客(71)
- 资源 (26)
- 收藏
- 关注
原创 微软面试题:求整数随机数构成的数组中找到长度大于=3的最长的等差数列
求微软面试题:求整数随机数构成的数组中找到长度大于=3的最长的等差数列输出等差数列由小到大: 如果没有符合条件的就输出[0,0]格式:输入[1,3,0,5,-1,6]输出[-1,1,3,5]要求时间复杂度,空间复杂度尽量小这里我还没有想到更好的办法,目前只实现了一个sb版本的时间复杂度为O(n^3)的算法。。暴力破解。。#include#include
2013-08-31 03:24:35 1505
转载 atoi atol实现
看了atol的实现,发现char到int的转换比较奇怪:c = (int)(unsigned char)*nptr++; 先将char转为unsigned再转为int,于是测试了下,发现有如下结果:void main(){ char c = 0x80; unsigned uc = 0x80; printf("c2i=%x,c2ui=%x,uc2i=%x,uc2
2013-08-30 21:02:31 1589
转载 C++ 关键字typeid
在揭开typeid神秘面纱之前,我们先来了解一下RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型,即允许“用指向基类的指针或引用来操作对象”的程序能够获取到“这些指针或引用所指对象”的实际派生类型。在C++中,为了支持RTTI提供了两个操作符:dynamic_cast和typeid。 dynam
2013-08-30 13:33:32 817
原创 找到字符串中第一个出现一次的字符
在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。#includeusing namespace std;int times[256];void main(){ char* data="ajsdlfasd"; int length=strlen(data); int i; for(i=0;i<length;i++) { times[data[
2013-08-29 14:32:09 993
原创 输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字
题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。#includeusing namespace std;void test(int* data,int&
2013-08-29 14:15:30 2177
原创 遍历一次反转单链表
遍历单链表一次,反转链表。#includeusing namespace std;typedef struct NODE{ NODE(int v) { value=v; next=NULL; } int value; NODE* next;}Node;void printList(NODE* head){ coutvalue<<" "; if(head
2013-08-29 13:01:54 1525
原创 数对之差的最大值
题目:在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果。#includeusing namespace std;void main(){ int data[]={2, 4, 1, 16, 7, 5, 11, 9}; int length=sizeof(
2013-08-29 03:13:28 1363
原创 虚拟地址空间分配
在WIN32中,每个应用程序都可“看见”4GB的线性地址空间,其中最开始的4MB和最后的2GB由操作系统保留,剩下不足2GB的空间用于应用程序私有空间。具体分配如下:0xFFFFFFFF-0xC0000000的1GB用于VxD、存储器管理和文件系统; 0xBFFFFFFF-0x80000000的1GB用于共享的WIN32 DLL、存储器映射文件和共享存储区;
2013-08-26 00:42:36 1604
原创 windows下的虚拟内存分配分析
让我们从原始的进程创建开始分析吧。当进程创建后,操作系统给该进程分配4GB的虚拟地址空间,这部分虚拟内存是你的应用程序看的到的区域(注意很大一部分是不能访问的,比如:内核区域,这部分加载了操作系统中的内存管理,线程调度,文件系统和所有的设备驱动程序的代码,他们是所有进程共享的地址空间,但是不能访问)。当分配完了虚拟地址空间后,其实这些地址空间还是空闲的,自由的,你此时还是不能使用这些空间,那怎么才
2013-08-25 23:56:33 1829
原创 dll和exe的共享节------多进程共享dll/exe全局变量
我们都知道同一个应用程序的多个实例之间并不会影响各自的变量,虽然他们的地址空间都是被该应用程序的映像内的物理存储器所提交,他们的数据和代码都是指向了该应用程序的映像,但是他们还是不会影响各自的变量,因为采取了copy-on-write机制,当有一个实例去修改共享的那个数据区的时候,那么操作系统会另外分配一个内存块,该内存块就是存放这个实例修改的数据,所以并不会影响其他的应用程序实例。那么可执行
2013-08-25 22:45:35 3181
转载 recv send 阻塞和非阻塞
int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。 该函数的第一个参数指定发送端套接字描述符; 第二个参数指明一个存放应用程序要发送数
2013-08-25 12:42:10 1003
原创 windows编程之多线程总结
用于线程互斥的方法有:原子锁,关键区域(CriticalSection)。用于线程同步的方法有:事件(Event),互斥量(Mutex),信号量(Semaphore),定时器(这里我们不谈)。 原子锁:InterlockedIncrement(LONG volatile*Addend);InterlockedDecrement(LONG volatile*Addend)
2013-08-25 02:19:20 1503
原创 结构体之位域全面分析
结构体的定义 typedef struct TEST{ . . .}Test,*pTest;struct TEST{ . . .}test这里的test是一个TEST变量。。 结构体之位域有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一
2013-08-25 00:06:42 8351
转载 beginthreadex和CreateThread区别
线程对于初学者还说可能觉得很高深,这可以理解。对于某些有经验的程序员来说,可能觉得又太简单,我觉得如果认为线程很简单的人,都是没有理解线程,线程里面涉及的东西太多,包括内存,初始化,线程同步等。我打算以QA的形式来写这篇文章。 Q:为什么书上说要以_beginthreadex来替代CreateThread?A:好了,一直用API CreateThread来创建线程的同志
2013-08-24 15:52:51 938
原创 快速排序
#includeusing namespace std;void swap(int* a,int* b){ int temp=*a; *a=*b; *b=temp;}void quickSort(int a[],int first,int last){ if(first<last) { int i=first+1,j=last; int temp=a[fir
2013-08-24 00:41:27 1142
原创 C++知识点补强之----数组作为参数传递
今天写了几个排序,发现对数组作为参数传递还不是很熟练啊,刚起来,脑袋还不是很清醒。所以在这里总结复习一下这个小知识点。。#includeusing namespace std;void test1(int a[]){ cout<<"int test1 fuction:"<<" "<<sizeof(a)<<endl;}void test2(int (&
2013-08-23 16:05:43 1279
原创 直接选择排序
#includeusing namespace std;void swap(int* a,int* b){ int temp=*a; *a=*b; *b=temp;}void main(){ int a[]={3,5,7,3,2,4,6,7,9,4,3,24,6,8}; int length=sizeof(a)/sizeof(int); int i; int j;
2013-08-23 15:31:14 881
原创 希尔排序
#includeusing namespace std;void swap(int* a,int* b){ int temp=*a; *a=*b; *b=temp;}void main(){ int a[]={2,5,3,7,4,8,2,6,2,4,10}; int length=sizeof(a)/sizeof(int); int gap=length/2; in
2013-08-23 15:22:09 749
原创 归并排序
#includeusing namespace std;void sort(int a[],int first,int mid,int last,int temp[]){ int i=first; int j=mid; int count=0; while(1) { if(a[i]<a[j]) { temp[count++]=a[i++]
2013-08-23 13:55:59 1006
原创 直接插入排序
#includeusing namespace std;void swap(int* a,int* b){ int temp=*a; *a=*b; *b=temp;}void main(){ int a[]={3,6,2,7,5,4,0,10,53,26}; int length=sizeof(a)/sizeof(int); int i;
2013-08-23 13:54:44 1162
原创 冒泡排序
#includeusing namespace std;void swap(int* a,int* b){ int temp=*a; *a=*b; *b=temp;}void main(){ int a[]={3,5,7,9,1,4,7,0,10,38}; int length=sizeof(a)/sizeof(int); int i; int j; for(i=0;i
2013-08-23 13:53:31 927
原创 i++和++i真的没区别么?i+=1和i=i+1真的没区别么
写篇文章记录下小知识点。首先是i++和++i,我这里说的是性能问题,而不是该等于i呢还是等于i+1呢这么基础的问题,其实性能大家仔细想想也很容易知道,++i的性能比i++的性能好,但是我们程序中如果在不受影响的情况下,都会使用i++;其实这是不太好的做法,至少性能上稍微不太好。++i模拟:int fuction(){ i=i+1; return i;
2013-08-21 14:53:51 5143 2
原创 向剪贴板中放入数据
其实向剪贴板中放入数据很简单,只是调用SetClipboardData函数就OK了。不过在这之前你必须打开剪贴板和清空剪贴板中的数据。OpenClipboard和EmptyClipboardvoid CdrayFilesDlg::OnBnClickedPutData(){ // TODO: 在此添加控件通知处理程序代码 if(!OpenClipboard()) { Me
2013-08-20 14:07:15 2222 1
原创 IP多播---C++实现
多播基础知识: 普通IP通信是在一个发送者和一个接收者之间进行的,我们常把它称为点对点的通信,但对于有些应用,这种点对点的通信模式不能有效地满足实际应用的需求。例如:一个数字电话会议系统由多个会场组成,当在其中一个会场的参会人发言时,要求其它会场都能即时的得到此发言的内容,这是一个典型的一对多的通信应用,通常把这种一对多的通信称为多播通信。采用多播通信技术,不仅可以实现一个发送者和
2013-08-20 13:01:34 2266
原创 剪贴板监控--C++实现
给大家两个消息,happy的去玩吧:WM_CHANGECBCHAIN 和 WM_DRAWCLIPBOARD。。原理:剪贴板有一个监控链表,这个链表中就是监控了剪贴板的程序,如果有新的监控程序加入或移出,那么就会给这个链表中每个程序发送一个消息WM_CHANGECBCHAIN ,当然这是采用链式的传递消息,每个程序负责传给下一个程序;当剪贴板中的数据发生变化时,会给我们的窗口发送一个WM_DRA
2013-08-19 11:05:56 5591
原创 构造函数中调用虚函数---C++
#include class A { public: A(){function();} virtual void function(){printf("A");} }; class B :public A{ public: B(){function();} void function(){printf("B");} };
2013-08-19 10:10:10 1001
转载 C++宏总结
有人视宏为洪水猛兽,甚至要求完全从C/C++中摒弃,有人则认为宏为至尊宝典,在逻辑代码中都大量使用。个人认为这是个仁者见仁智者见智的问题,摒弃就没必要了,看看宏在MFC和ATL中的一些经典应用,你会发现如果不使用宏来实现一些消息映射和对象映射神马的那将让“苦逼”程序员多花费多少宝贵的时间。当然也不能滥用,尤其是尽量不要在逻辑代码中使用,宏中的逻辑出问题后,调试时候的痛苦你就真的会发现原来程序员真的
2013-08-19 09:54:49 908
原创 文件拖拽效果----C++实现
告诉大家三个API函数一切就OK。。。。DragAcceptFiles,DragQueryFile和DragFinish. 下面是我简单的实现。。 我创建的是个mfc工程。。界面放了一个listbox。。成员变量:m_list。在OnInitDialog()中添加: this->DragAcceptFiles(TRUE); 再给这个对话框添加一个WM_DROP
2013-08-18 10:06:34 4168
原创 将字符串变成大写----C++实现
虽然这个题目很简单,但是也是会范很多错误的,平时你肯定知道,但是在编程的时候就是容易犯傻,而且八匹马都拽不回来。。。看来还是要多写写代码。。不废话了。直接贴代码。。#include#includeusing namespace std;char* toUpperChar(char* src){ int length=strlen(src); char* m_dest=n
2013-08-17 20:59:38 2688
原创 链表复习----C++
马上就要找工作了,要复习复习数据结构,看到网上的试题,所以就动手写了写。。这里花了十几分钟写了个链表删除指定node..需求:删除指定学生链表中学生年龄为n的学生。。 #include#includeusing namespace std;typedef struct student{ int id; string name; int age; struct stu
2013-08-17 19:12:27 1217
原创 python入门
1:Using Python as a Calculator>>> 2+24>>> # This is a comment... 2+24>>> 2+2 # and a comment on the same line as code4>>> (50-5*6)/45.0>>> 8/5 # Fractions aren't lost when dividing integer
2013-08-17 15:46:35 1145
原创 内存映射文件详解-----C++实现
先不说内存映射文件是什么。贴个代码先,。#include #include #include #include using namespace std;int main(){ //开始 //获得文件句柄 HANDLE hFile=CreateFile( "c:\\test.dat", //文件名 GENERIC_READ
2013-08-17 14:01:59 6991
原创 strcpy,memcpy,memmove和内存重叠分析
一:strcpy函数用法和实现: /* GNU-C中的实现(节选): */ char* strcpy(char *d, const char *s) { char *r=d; while((*d++=*s++)); return r; } 有没有发现这个实现并不是很好。。至少没有判断是不是为NULL。一个更好的版本: ch
2013-08-16 14:28:55 1478
转载 cocos2d-x的版本更换和cocos2d-x2.1.4的安装
很久以前使用博客园博主子龙山人的一篇博文《Cocos2d-x win7+vs2010配置图文详解(亲测)》成功配置过cocos2d-1.01-x-0.9.1版本,链接为:Cocos2d-x win7 + vs2010 配置图文详解(亲测)-来自子龙山人的博客,他写的博客图文并茂,很是详细。现在想要使用最新版本cocos2d-x-2.1.4,于是需要把之前安装到VS2010中cocos2d-1.
2013-08-14 15:27:48 1537
转载 cocos2d-x各种宏的集锦
1.数学类cocos2d-x 里使用最多的数学类型是CCPoint,一个点,本质上也是一个向量,对于向量和向量之间有很多的数学操作要做,oh我知道要干什么,也许我知道怎么求一个值但是不知道怎么求得高效(或者不知道),怎么办我能偷懒吗?那当然可以。这其实并不是一个懒的标准,因为有一些方法写多了也可能确实稍微有那么点麻烦,所以自然cocos2d提供了一套ccp系列来帮助我们完成很多的工作,也显示一
2013-08-14 10:51:25 892
原创 还原virtual函数的本质-----C++
当你每次看到C++类中声明一个virtual函数,特别是看到了一个virtual的虚构函数。你知道它的意思吗?你肯定会毫不犹豫的回答:不就是多态么。。。在运行时确定具体的行为么。。。完全正确,但这里我要讲的不只是这些东西。 有些类需要虚函数,有些不需要虚函数。这是为什么,一般你看到的类如果有一个虚析构函数,那么这个类中应该会有至少一个是虚函数的。。这是为什么呢??如果我们类中没有用其他虚函数的
2013-08-13 22:13:17 2199
原创 const成员函数和非const的成员函数之间的调用
其实这篇文章有点多余,一般我们不会有这样的需求吧。。其实我这里也是基于一个概念:代码重构。举个例子:const char& getText(int i) const 和char& getText(int i),看了上一篇文章的人肯定都知道它们,就直接返回对象中一变量的一个值,就一行代码。非常的简单。。但是我们这里假设:如果在这个函数里面有很长的一段代码,那就不知道会冗长多少代码了,此时一般我们
2013-08-13 19:31:15 3636
原创 你所不知道的const------C++
一直对这些东西很感兴趣,但是我们都知道能做项目才是关键,懂这些有个屁用啊。。愿意坚持下去,不管别的人怎么看,那些其他的const的用法,我就不废话了,网上一找一大堆,这里我要说的是一个const 的特性,还有在写代码的时候发现了另外一个有意思的东西。。反正现在在学校也没事,等着找校园招聘啦,所以在这里多写写博客,和大家分享分享。特性:多态。。(重载)大家都知道重载是一种静态多态,编译时多态
2013-08-13 18:20:11 1269
原创 灰度图像二值化-----c++实现
前天闲着没事干,就写了写BMP图像处理,感觉大家还比较感兴趣。。所以现在没事,继续更新。。这次简单的写了灰度图像二值化。。这是什么概念呢?图像的二值化的基本原理 图像的二值化处理就是将图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重
2013-08-13 16:47:36 21395 7
转载 cocos2d-x之retain和release解析
retain和release倒底怎么玩? 转载请注明,原文地址: http://blog.csdn.net/musicvs/article/details/8689345正文: 1. 为什么会有retain?C++和Java不一样,Java有一套很方便的垃圾回收机制,当我们不需要使用某个对象时,给它赋予null值即可。而C++new了一个对象之后
2013-08-13 14:35:37 1329
深入理解计算机系统
2013-09-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人