- 博客(34)
- 资源 (5)
- 收藏
- 关注
原创 _BLOKC_TYPE_IS_VALID(pHead->nBlockUse)
class Test{ public: Test(int val = 1){i = new int ; *i = val;} ~Test(){delete i;} int getVal(){return *i;} private: int *i; }; int main() { Test a,b(2); a = b; cout<<a.getVal()<<endl; return 0
2014-01-18 11:40:52 704
原创 MFC中显示像素值保存在二维数组中的BMP图像
BYTE *imShow = new BYTE[height*width]; for(int j=height-1,cur=0;j>=0;--j) { for(int i=0; i<width; ++i) imShow[cur++] = (BYTE)imRot[j][i]; } if (m_bmp.m_hObject!=NULL) //判断 m_bmp.DeleteO
2013-12-28 11:07:19 2815
原创 BMP图像的选择与显示
void CMFCTestDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); CFileDialog file_open_dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,("BMP Files(*.bmp)|*.bmp|All Files(*.*)|*.*||")); file_
2013-12-28 10:59:17 926
原创 2013巨人网络C++笔试题
1、进程与线程的区别,及其优点 2、如何将自己写的程序,开机直接打开 3、为何使用Release()删除,而不是使用delete删除 4、关键字const;static;extern;volatile;auto的用法 5、struct结构拷贝 #define const int MAXLength 32 struct ttk{ int a; char first[MAXLeng
2013-10-23 09:21:23 959
原创 短文 词频
本程序从正文文件text.txt读入一篇英文短文,统计该短文中不同单词和它的出现次数,并按词典编辑顺序将单词及它的出现次数输出到正文文件word.txt中.程序用一棵有序二叉树存储这些单词及其出现的次数,一边读入一边建立.然后中序遍历该二叉树,将遍历经过的二叉树上的节点的内容输出. #include #include #include using namespace std; ifs
2013-08-21 15:13:05 437
原创 寻找第K大的数
可以用容量为K的最小堆来存储最大的K个数。最小堆的堆顶就是最大K个数中最小的一个,即第K大的数。每次新考虑一个数X,如果X比堆顶的元素Y小,则不需要改变原来的堆,如果比堆顶元素大,那么用X替换堆顶的元素Y。在X替换堆顶元素Y之后,X可能破坏最小堆的结构,需要更新堆来维持堆的性质。更新过程花费的时间复杂度为O(log2K). #include using namespace std; void
2013-08-17 12:06:09 459
转载 二叉查找树(二叉排序树)的详细实现
1、序 详细实现了二叉查找树的各种操作:插入结点、构造二叉树、删除结点、查找、 查找最大值、查找最小值、查找指定结点的前驱和后继 2、二叉查找树简介 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树
2013-07-06 22:40:30 499
原创 二叉树树的基本算法
#include using namespace std; #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef char ElemType; const int MaxLength = 30;//结点个数不超过30个 typedef struct BiTreeNode{ ElemType data; struct BiTree
2013-06-24 14:20:41 469
原创 期望为线性时间的选择算法randomizedSelect
一般选择算法看起来要比找最小值这样的简单问题更难,但有期望为线性时间的选择算法,期望运行时间为O(n)。 #include #include using namespace std; template int partition(T *a,int first,int end) //实现了对子数组A[p..r]的原址重排 { int x = a[end-1]; int i = first
2013-06-09 21:14:07 883
原创 桶排序
桶排序假设输入数据服从均匀分布,平均情况下它的时间代价为O(n)。与计数排序类似,因为对输入数据做了某种假设桶排序的速度也很快。具体来说,计数排序假设输入数据都属于一个小区间内的整数,而桶排序则假设输入是由一个随机过程产生,该过程将元素均匀、独立地分布在[0,1)区间上。 #include using namespace std; template void insertSort(T *a,
2013-06-09 21:04:54 445
转载 排序算法稳定性
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。 判断方法: 对于不稳定的排序算法,只要举出一个实例,即可说明它的不稳定性;而对于稳定的排序算法,必须对算法进行分析从而得到稳定的特性。需要注意的是,排序算法是否为稳定
2013-06-08 11:09:39 692
原创 计数排序
//计数排序假设n个输入元素中的每一个都是在0到k区间内的一个整数,其中k为某个整数。 #include using namespace std; int* countingSort(int *A,int *B,int ASize) { int maxKey = -65535; for(int i=0;i<ASize;++i) { B[i] = 0; if(A[i]>maxKey)
2013-06-08 09:56:55 346
原创 快速排序
快速排序的运行时间依赖于划分是否平衡,而平衡与否又依赖于用于划分的元素。如果划分是平衡的,那么快速排序算法性能与归并排序一样。如果划分是不平衡的,那么快速排序的性能就接近于插入排序了。 #include using namespace std; //快速排序 template int partition(T *a,int first,int end) //实现了对子数组A[p..r]的
2013-06-07 15:11:24 407
原创 优先队列
堆的一个常见的应用:作为高效的优先队列。 优先队列是用来维护有一组元素构成的集合S的数据结构,其中的每一个元素都有一个相关的值,称为关键字。一个最大优先队列支持一下操作: INSERT(S,x): 将元素x插入集合中。 MAXIMUM(S):返回S中具有最大键字的元素。 EXTRACT-MAX(S):去掉并返回S中的具有最大键字的元素。 INCREASE-KEY(S,x,k):将元素x的
2013-06-07 10:09:22 423
原创 堆排序
#include using namespace std; void maxHeap(int *a,int i,int heapSize) { int l = 2*i; int r = 2*i+1; int largest=0; if(la[i-1]) //左孩子大于父节点 largest = l; else largest = i; if(ra[large
2013-06-06 16:08:04 368
原创 最大子数组问题
//分治策略 #include using namespace std; struct subarray //返回一个下标元组划定跨越中点的最大子数组的边界,并返回最大子数组中值的和 { int left; int right; int sum; }sub,subL,subR,subC; subarray FIND_MAX_CROSSING_SUBARRAY(int *a,int l
2013-06-05 15:03:39 496
原创 bubbleSort
#include using namespace std; templatevoid bubbleSort(T *a,int num) { for(int i=0;i<num-1;++i) for(int j=num-1;j>=i+1;--j) if(a[j-1]>a[j]) swap(a[j-1],a[j]); } templatevoid print(T *a,int n
2013-06-04 11:17:02 436
原创 selectionSort
#include using namespace std; templatevoid selectionSort(T *a,int num) { int min=0; //最小值下标 for(int i=0;i<num-1;++i) { min = i; for(int j=i+1;j<num;++j) if(a[j]<a[i]) min = j; swap(a[
2013-06-04 11:03:36 467
原创 mergeSort
#include using namespace std; template void merge(T *a,int left,int mid,int right) { int n1=mid-left+1; int n2=right-mid; T *L = new T[n1]; T *R = new T[n2]; for(int i=0;i<n1;++i) L[i] = a[left
2013-06-04 10:17:42 482
原创 insertSort
#include using namespace std; template void insertSort(T *a,int num) { int i,j; T key; for(j=1;j<num;++j) { key=a[j]; i=j-1; while(i>=0&&a[i]>key) { a[i+1]=a[i]; --i; } a[i+1]=ke
2013-06-03 15:42:39 434
转载 vi命令
进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后一行首 vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处 vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复f
2013-05-21 11:35:10 357
原创 使用者自定义User-Defined的迭代器
以下实例说明如何编写自定义的迭代器。这事一个关联式容器的Insert迭代器,虾米那是其实作代码 #include using namespace std; //template class for insert iterator for associative containers template class asso_insert_iterator:public iterator { p
2013-05-15 14:59:12 337
原创 数组外包装为STL容器
下面介绍一个很有用的数组包装类别,性能不输一般的数组,而且更安全。这是“使用者自行定义STL容器”的一个很好的例子。该容器所使用的,就是包装法:在数组之外包装一层常用的容器界面。 Class carray定义如下: //carray.h #include template class carray{ private: T v[thesize]; //fixed-size array
2013-05-11 17:25:23 740
原创 运用maps strings 并于执行期指定排序准则
#include #include #include #include #include using namespace std; //function object to compare strings //allows you to set the comparison criterion at runtime and compare case insensitive
2013-05-11 11:16:38 466
原创 Sets 执行期制定排序准则
无论是将排序准则作为第二个template参数传入,或是采用缺省的排序准则less #include #include #include"print.h" using namespace std; //type for sorting criterion template class RuntimeCmp{ public: enum cmp_mode{normal,rever
2013-05-09 21:32:07 526
原创 STL Container
1、以标准输入装置完成初始化操作: vector vec((std::istream_iterator(cin)),(std::istream_iterator())); 注意不要遗漏了涵括“初始化参数”的那对“多余的”括号,否则这个表达式的意义会迥然不同。 以标准输出堵操作: //print elements separated with spaces copy(vec.beg
2013-05-07 20:31:36 429
转载 虚拟继承 与 sizeof
1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下: class A class B1:public virtual A; class B2:p
2013-04-25 20:39:56 445
原创 字符指针
很好的一个字符指针例题 char *str[]={"welcome","to","Fortemedia","Nanjing"}; char**p=str+1; str[0]=(*p++)+2; str[1]=*(p+1); str[2]=p[1]+3; str[3]=p[0]+(str[2]-str[1]); cout cou
2013-04-25 13:29:52 414
原创 sizeof 部分用法
1、指针变量的sizeof 指针记录了另一个对象的地址。既然是来存放地址的,那么它当然等于计算机内部地址总线的宽度。所以在32位计算机中,一个指针变量的返回值必定是4(注意结果是以字节为单位)。 char* pc = "abc"; int* pi; string* ps; char** ppc = &pc; void (*pf)();//指针函数 size
2013-04-12 21:51:59 313
转载 strcpy写法 出现频率最高的笔试题
题目 已知strcpy函数的原型是: char * strcpy(char * strDest,const char * strSrc); ⒈不调用库函数,实现strcpy函数。 ⒉解释为什么要返回char *。 解说 ⒈strcpy的实现代码 char * strcpy(char * strDest,const char * strSrc) {
2013-04-09 21:57:58 377
原创 类String定义原型
定义类String的原型为: class String { public: String(const char *str = NULL);// 普通构造函数 String(const String &other); // 拷贝构造函数 ~ String(void); // 析构函数 String & operator =(const String &oth
2013-04-09 19:49:47 430
原创 算法(Algorithm)
算法(Algorithm) 处理多个区间 如果某个算法用来处理多个区间,那么当你调用它时,务必确保第二(以及其他)区间所拥有的元素个数,至少和第一区间内的元素个数相同。 要想让目标区间够大,你要不一开始就给他一个正确大小,要不就显式地改变其大小。这两个办法都只适用于序列容器(vectors,deques,lists)。关联式容器根本不会有此问题,因为关联式容器不可能被当做覆写型算法的操作目标
2013-04-08 22:35:32 479
原创 auto_ptr智能指针
1、Class auto_ptr 这个智能指针应该保证,无论在何种情形下,只要自己被摧毁,就一定连带释放其所指资源。而由于智能型指针本身就是区域变量,所以无论是正常退出,还是异常退出,只要函数退出,它就一定会被销毁。 注意:auto_ptr不允许使用一般指针惯用的赋值(assign)初始化方式。必须直接使用数值来完成初始化: s td::auto_ptrptr
2013-04-06 14:51:22 335
原创 让自己习惯C++
尽可能使用const Chargreeting[] = “Hello”; Char*p = greeting; //non-constpointer, non-const data Constchar* p = greeting;
2013-03-23 21:19:15 324
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人