摘要: 转自http://www.cnblogs.com/bigshow/archive/2009/01/03/1367661.htmlC++中分配二位数组:(1)已知第二维Code-6char (*a)[N];//指向数组的指针a = new char[m][N]; //不需要类型转化,因为new一个二位数组类型正好是指向一维数组的指针,二位数组名的类型也是这个。我一开始是使用a=(char (*)[N])new char[m*N];这种方式。printf("%d\n", sizeof(a));//4,指针printf("%d\n", sizeof(a[0]) 阅读全文
posted @ 2013-03-30 19:14 particle 阅读(2704) 评论(0) 推荐(0) 编辑
摘要: 最关键的函数: 1 inline void swap(int *arr,int i,int j) 2 { 3 if(i==j) 4 return; 5 arr[i]=arr[i]^arr[j]; 6 arr[j]=arr[i]^arr[j]; 7 arr[i]=arr[i]^arr[j]; 8 } 9 10 void siftup(int *heap,int n)11 {12 /*1..n-1 is a heap*/13 for(int i=n,p;i>1&&heap[p=i/2]<heap[i];i=p)14 s... 阅读全文
posted @ 2013-03-27 11:47 particle 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 首先构造公共基类,因为包含纯虚函数,所以是虚基类View Code 1 #pragma once2 3 class IntSet{4 public:5 virtual int size()=0;6 virtual void report(int *v)=0;7 virtual void insert(int t)=0;8 };基于数组的实现:View Code 1 #include "IntSet.h" 2 3 class IntSetArray:public IntSet{ 4 int n,*x; 5 public: 6 IntSetArray(i... 阅读全文
posted @ 2013-03-24 15:45 particle 阅读(574) 评论(0) 推荐(0) 编辑
摘要: 方法1: 1 void rand1(int n,int m) 2 { 3 for(int i=0;i<n;++i) 4 if(rand()%(n-i)<m)//用n-i比再定义一个num记录还剩几个更好 5 { 6 cout<<i<<" "; 7 --m; 8 } 9 cout<<endl;10 }方法2:1 void rand2(int n,int m)2 {3 set<int> num;4 while(num.size()<m)5 num.inse... 阅读全文
posted @ 2013-03-20 11:33 particle 阅读(401) 评论(0) 推荐(0) 编辑
摘要: 插入排序最终版本:insertion sort快排序最终版本:quick sort 1 int cutoff=10;//瞎定义的 2 3 void quick_sort1(int l,int u) 4 { 5 if(u-l<cutoff) 6 return ; 7 int p=l+rand()%(u-l+1);//防止sorted sequence 8 int tmp=arr[l];arr[l]=arr[p];arr[p]=tmp; 9 int i=l,j=u+1;10 int t=arr[l];11 for(;;)12 ... 阅读全文
posted @ 2013-03-17 12:43 particle 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 二分查找的确是个很不错的算法,虽然简单,但是边界容易出错。书中最初的二分查找l和u(我的代码中是r)对应数组中最小下标和最大下标,即l=0,u=n-1,数组为arr[l..u]。而后面优化的代码中l和u就变成了最小下标-1和最大下标+1了,即l=-1,u=n,数组为arr[l+1...u-1]。不太明白其中深刻含义,我试了一下l=0,u=n(Python中范围都是这么表示),发现第二段代码(即找出t的第一处位置)实现不出来,用原来的代码在数组只剩下1个或2个元素的时候会出现死循环。所以,我索性用最原始的表示方法实现了后面几个优化代码,并做了个时间测试程序(脚手架)来看运行时间。原二分查找:原二 阅读全文
posted @ 2013-03-14 22:48 particle 阅读(2352) 评论(0) 推荐(0) 编辑
摘要: 在Windows的多线程编程中,创建线程的函数主要有CreateThread,_beginthead(_beginthreadex)和AfxBeginThread,那么它们之间有什么联系与区别呢?当我需要创建一个线程时该用哪个函数呢?下面先介绍各个函数的用法:CreateThread:函数原型:HANDLE WINAPI CreateThread(_in LPSECURITY_ATTRIBUTESlpThreadAttributes,_in SIZE_TdwStackSize,_in LPTHREAD_START_ROUTINElpStartAddress,_in LPVOIDlpParame 阅读全文
posted @ 2012-11-22 22:16 particle 阅读(3016) 评论(0) 推荐(0) 编辑
摘要: malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。内存泄漏对于malloc或者n 阅读全文
posted @ 2012-11-18 09:17 particle 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 1、《算法导论》第二版的附录C.2概率有这么一道习题:一个监狱看守从三个罪犯中随机选择一个予以释放,其他两个将被处死。警卫知道哪个人是否会被释放,但是不允许给罪犯任何关于其状态的信息。让我们分别称罪犯为X,Y,Z。罪犯X私下问警卫Y或Z哪个会被处死,因为他已经知道他们中至少一个人会死,警卫不能透露任何关于他本人状态的信息。警卫告诉X,Y将被处死。X感到很高兴,因为他认为他或者Z将被释放,这意味着他被释放的概率是1/2。他正确吗?或者他的机会仍是1/3?请解释。题目中罪犯问警卫另外两个人哪个被处死了,因为在另外两人中至少有一人被处死,所以警卫告诉犯人一个人被处死这件事的概率就是1。设A为X被释放 阅读全文
posted @ 2012-11-17 15:21 particle 阅读(992) 评论(2) 推荐(0) 编辑
摘要: 首先引用两篇非常好的博文,什么时候对字符集编码概念不清楚的时候,一定要看看。也谈计算机字符编码浅谈C中的wprintf和宽字符显示另外引用一个列举的宽字符处理函数比较全的文章,文章中没提到的是文件打开函数_wopen(...),格式化输出函数wprintf(...)。宽字符处理函数函数与普通函数对照表然后是两段我做的小例子,都可以输出汉字:使用宽字符(Unicode编码,vc下为UTF-16,所有字符都是16位,其中ASCII字符高字节0x00):#include "stdio.h"#include "stdlib.h"#include <loca 阅读全文
posted @ 2012-11-03 11:38 particle 阅读(4076) 评论(0) 推荐(0) 编辑