- 博客(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 713
原创 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 2823
原创 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 933
原创 2013巨人网络C++笔试题
1、进程与线程的区别,及其优点2、如何将自己写的程序,开机直接打开3、为何使用Release()删除,而不是使用delete删除4、关键字const;static;extern;volatile;auto的用法5、struct结构拷贝#define const int MAXLength 32struct ttk{int a;char first[MAXLeng
2013-10-23 09:21:23 971
原创 短文 词频
本程序从正文文件text.txt读入一篇英文短文,统计该短文中不同单词和它的出现次数,并按词典编辑顺序将单词及它的出现次数输出到正文文件word.txt中.程序用一棵有序二叉树存储这些单词及其出现的次数,一边读入一边建立.然后中序遍历该二叉树,将遍历经过的二叉树上的节点的内容输出.#include#include#includeusing namespace std;ifs
2013-08-21 15:13:05 439
原创 寻找第K大的数
可以用容量为K的最小堆来存储最大的K个数。最小堆的堆顶就是最大K个数中最小的一个,即第K大的数。每次新考虑一个数X,如果X比堆顶的元素Y小,则不需要改变原来的堆,如果比堆顶元素大,那么用X替换堆顶的元素Y。在X替换堆顶元素Y之后,X可能破坏最小堆的结构,需要更新堆来维持堆的性质。更新过程花费的时间复杂度为O(log2K).#includeusing namespace std;void
2013-08-17 12:06:09 462
转载 二叉查找树(二叉排序树)的详细实现
1、序 详细实现了二叉查找树的各种操作:插入结点、构造二叉树、删除结点、查找、 查找最大值、查找最小值、查找指定结点的前驱和后继2、二叉查找树简介 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树
2013-07-06 22:40:30 504
原创 二叉树树的基本算法
#includeusing namespace std;#define OK 1#define ERROR 0#define OVERFLOW -2typedef char ElemType;const int MaxLength = 30;//结点个数不超过30个typedef struct BiTreeNode{ ElemType data; struct BiTree
2013-06-24 14:20:41 473
原创 期望为线性时间的选择算法randomizedSelect
一般选择算法看起来要比找最小值这样的简单问题更难,但有期望为线性时间的选择算法,期望运行时间为O(n)。#include#includeusing 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 888
原创 桶排序
桶排序假设输入数据服从均匀分布,平均情况下它的时间代价为O(n)。与计数排序类似,因为对输入数据做了某种假设桶排序的速度也很快。具体来说,计数排序假设输入数据都属于一个小区间内的整数,而桶排序则假设输入是由一个随机过程产生,该过程将元素均匀、独立地分布在[0,1)区间上。#includeusing namespace std;template void insertSort(T *a,
2013-06-09 21:04:54 447
转载 排序算法稳定性
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。判断方法:对于不稳定的排序算法,只要举出一个实例,即可说明它的不稳定性;而对于稳定的排序算法,必须对算法进行分析从而得到稳定的特性。需要注意的是,排序算法是否为稳定
2013-06-08 11:09:39 694
原创 计数排序
//计数排序假设n个输入元素中的每一个都是在0到k区间内的一个整数,其中k为某个整数。#includeusing 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 348
原创 快速排序
快速排序的运行时间依赖于划分是否平衡,而平衡与否又依赖于用于划分的元素。如果划分是平衡的,那么快速排序算法性能与归并排序一样。如果划分是不平衡的,那么快速排序的性能就接近于插入排序了。#includeusing namespace std;//快速排序template int partition(T *a,int first,int end) //实现了对子数组A[p..r]的
2013-06-07 15:11:24 409
原创 优先队列
堆的一个常见的应用:作为高效的优先队列。优先队列是用来维护有一组元素构成的集合S的数据结构,其中的每一个元素都有一个相关的值,称为关键字。一个最大优先队列支持一下操作:INSERT(S,x): 将元素x插入集合中。MAXIMUM(S):返回S中具有最大键字的元素。EXTRACT-MAX(S):去掉并返回S中的具有最大键字的元素。INCREASE-KEY(S,x,k):将元素x的
2013-06-07 10:09:22 426
原创 堆排序
#includeusing 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 371
原创 最大子数组问题
//分治策略#includeusing 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 500
原创 bubbleSort
#includeusing 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 440
原创 selectionSort
#includeusing 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 470
原创 mergeSort
#includeusing 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 489
原创 insertSort
#includeusing 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 442
转载 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 362
原创 使用者自定义User-Defined的迭代器
以下实例说明如何编写自定义的迭代器。这事一个关联式容器的Insert迭代器,虾米那是其实作代码#includeusing namespace std;//template class for insert iterator for associative containerstemplate class asso_insert_iterator:public iterator{p
2013-05-15 14:59:12 342
原创 数组外包装为STL容器
下面介绍一个很有用的数组包装类别,性能不输一般的数组,而且更安全。这是“使用者自行定义STL容器”的一个很好的例子。该容器所使用的,就是包装法:在数组之外包装一层常用的容器界面。Class carray定义如下://carray.h#includetemplateclass carray{private:T v[thesize]; //fixed-size array
2013-05-11 17:25:23 745
原创 运用maps strings 并于执行期指定排序准则
#include#include#include#include#includeusing 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 473
原创 Sets 执行期制定排序准则
无论是将排序准则作为第二个template参数传入,或是采用缺省的排序准则less#include#include#include"print.h"using namespace std;//type for sorting criteriontemplateclass RuntimeCmp{public:enum cmp_mode{normal,rever
2013-05-09 21:32:07 533
原创 STL Container
1、以标准输入装置完成初始化操作:vector vec((std::istream_iterator(cin)),(std::istream_iterator()));注意不要遗漏了涵括“初始化参数”的那对“多余的”括号,否则这个表达式的意义会迥然不同。以标准输出堵操作://print elements separated with spacescopy(vec.beg
2013-05-07 20:31:36 436
转载 虚拟继承 与 sizeof
1.为什么要引入虚拟继承虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下:class Aclass B1:public virtual A;class B2:p
2013-04-25 20:39:56 451
原创 字符指针
很好的一个字符指针例题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]);coutcou
2013-04-25 13:29:52 419
原创 sizeof 部分用法
1、指针变量的sizeof指针记录了另一个对象的地址。既然是来存放地址的,那么它当然等于计算机内部地址总线的宽度。所以在32位计算机中,一个指针变量的返回值必定是4(注意结果是以字节为单位)。char* pc = "abc";int* pi;string* ps;char** ppc = &pc;void (*pf)();//指针函数size
2013-04-12 21:51:59 316
转载 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 382
原创 类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 436
原创 算法(Algorithm)
算法(Algorithm)处理多个区间如果某个算法用来处理多个区间,那么当你调用它时,务必确保第二(以及其他)区间所拥有的元素个数,至少和第一区间内的元素个数相同。要想让目标区间够大,你要不一开始就给他一个正确大小,要不就显式地改变其大小。这两个办法都只适用于序列容器(vectors,deques,lists)。关联式容器根本不会有此问题,因为关联式容器不可能被当做覆写型算法的操作目标
2013-04-08 22:35:32 485
原创 auto_ptr智能指针
1、Class auto_ptr 这个智能指针应该保证,无论在何种情形下,只要自己被摧毁,就一定连带释放其所指资源。而由于智能型指针本身就是区域变量,所以无论是正常退出,还是异常退出,只要函数退出,它就一定会被销毁。 注意:auto_ptr不允许使用一般指针惯用的赋值(assign)初始化方式。必须直接使用数值来完成初始化: s td::auto_ptrptr
2013-04-06 14:51:22 338
原创 让自己习惯C++
尽可能使用const Chargreeting[] = “Hello”; Char*p = greeting; //non-constpointer, non-const data Constchar* p = greeting;
2013-03-23 21:19:15 328
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人