C++的CArray快速排序
摘要:/******************************************************************************************** * MOD-NAME : QArray.h * LONG-NAME : QuickSort algorithm enabled CArray * AUTHOR : huangpf * DEPARTMENT : XXX * CREATION-DATE : 2010-06-25 * FUNCTION : 实现CARRAY的快速排序算法 ***************************************
阅读全文
posted @
2011-03-04 17:05
carekee
阅读(1725)
推荐(0) 编辑
用表驱动代替switch-case
摘要:不知道从什么时候开始,switch-case语句成了代码坏味道的代名词,写代码的时候小心翼翼地避开它,看到别人代码中的switch-case就皱眉头,想想其实大可不必这样,switch-case语句并不是代码坏味道的根源,坏味道来自糟糕的代码(结构)设计,比如过多的switch-case分支,或者多重switch-case嵌套等等,这些都将导致代码可读性下降,如果再加上代码风格较差,代码不对齐,那么坏味道就相当地大了。 简短的switch-case还是继续用吧,但是对于分支太多的长switch-case最好能想办法化解开,那么什么算长什么算短呢?我也不知道,就以在最低分辨率的显示器上能够在一个
阅读全文
posted @
2011-01-31 15:55
carekee
阅读(999)
推荐(0) 编辑
用C++ TR1 生成随机数
摘要:用C++ TR1 生成随机数原作 :[英文原文]翻译 :Orbit(阿猫阿狗)介绍本文将介绍如何使用C++ TR1(C++ 标准委员会 Technical Report 1) 提供的随机数生成功能 除了介绍基本的一致随机数生成之外,还会介绍随机样本的可能分布,包括:柏努利分布,二项分布,指数分布,伽马分布,几何分布,正态分布和泊松分布。我会指出一些针对特定分布需要注意的地方,比如参数约定,最后还会给出一些提示,比如如何使用TR1不直接支持的分布产生随机数,比如柯西分布,chi-squared分布和Student t。Visual Studio 2008 现在通过 feature pack支持T
阅读全文
posted @
2011-01-31 15:52
carekee
阅读(2158)
推荐(0) 编辑
慎用USES_CONVERSION
摘要:慎用USES_CONVERSIONUSES_CONVERSION是ATL中的一个宏定义。用于编码转换(用的比较多的是CString向LPCWSTR转换)。在ATL下使用要包含头文件#include "atlconv.h"使用USES_CONVERSION一定要小心,它们从堆栈上分配内存,直到调用它的函数返回,该内存不会被释放。如果在一个循环中,这个宏被反复调用几万次,将不可避免的产生stackoverflow。在一个函数的循环体中使用A2W等字符转换宏可能引起栈溢出。#include atlconv.hvoid fn(){ while(true) { { USES_CONVERSION;
阅读全文
posted @
2011-01-14 17:24
carekee
阅读(24101)
推荐(1) 编辑
经典问题:double* (*a)[3][6];
摘要:经典问题:double* (*a)[3][6];cout<<sizeof(a)<<endl; // 4 a为指针cout<<sizeof(*a)<<endl; // 72 *a为一个有3*6个指针元素的数组cout<<sizeof(**a)<<endl; // 24 **a为数组一维的6个指针cout<<sizeo...
阅读全文
posted @
2010-09-26 14:29
carekee
阅读(820)
推荐(1) 编辑
vc++不定参数函数
摘要:不定数量参数的实现 - 每天进步一点点... - CSDN博客 每天进步一点点...——C/C++, Linux, /*----------------------------------------------------- SCRNSIZE.C -- Displays screen size in a message box (c) Charles Petzold, 1...
阅读全文
posted @
2010-09-26 13:25
carekee
阅读(2558)
推荐(0) 编辑
Skin++ 使用教程(VC软件外观美化工具)
摘要:一.加载Skin++0.将SkinPlusPlusDLL.lib,SkinPlusPlus.h,XPCorona.ssk都复制到当前目录1.在(VC7)"项目->属性->链接器->输入->附加依赖项"中加入SkinPlusPlusDLL.lib 或 在(VC6)"Project->Settings->Link->Object/library"中加入Skin...
阅读全文
posted @
2010-08-20 11:30
carekee
阅读(2226)
推荐(0) 编辑
在COM方法中用VARIANT类型传递数组数据
摘要:在COM方法中可用VARIANT类型传递数组数据,在VC++中用SAFEARRAY处理。下面给出输入和输出数组的例子 1。输入数组到COM中 STDMETHODIMP CTestCom1::vb2vc(VARIANT buffer) { long dim=SafeArrayGetDim(buffer.parray); long ubound; long lbound; SafeArrayGetUB...
阅读全文
posted @
2010-07-02 15:56
carekee
阅读(1033)
推荐(0) 编辑
原来指针也可以这样用啊
摘要:这两天我真疯掉了,主要是学习的原因.从来没有感觉指针还可以这样用.哎以后的好好看书了.struct strpt{char a:1;char b:2;char c:4;char d:2;};int a = 12;strpt* pt = (strpt*)&a;哎.....看来还的加强学习.不过我的能令vc2005编译器崩溃的程序还是让我自豪万分.错误提示:1>e:\workspace\t...
阅读全文
posted @
2010-06-03 00:17
carekee
阅读(371)
推荐(0) 编辑
浅说单态类
摘要:一说单态类,好多程序员都感觉脑袋大了,什么是单态类,它是干什么的,类不是可以有许多的实例吗,怎么会有单态类? 说白了,单态类就是类的实例只有一个.这样大家就都会明白了吧.但是如何做类的实例只有一份呢?大家的困惑的地方只有一个,就是类可以在多处new 这个类的实例. 可以说new 无处不在.那怎么实现类只有一个实例呢.对吧?其实这是惯性思维的结果,如果我们逆向思维一下就会明白如何实现类的一个实例.列...
阅读全文
posted @
2010-06-03 00:13
carekee
阅读(1332)
推荐(0) 编辑
线程注入
摘要:今天共享一篇线程注入的知识,提到注入大家会 想到的是不好的名词对吗,其实注入是在调试工具中最常用的如 VC 自带的DLL查看器(Depends.Exe)、微点 的主动防御软件、Symbian 内存泄露检测工具HookLogger 等等。本文适合人群为高级程序员、高级技术人员和中 级程序员等。如果对进程,线程,虚拟内存管理,DLL以及字符集编码不了解的,那就回头翻 一翻相关知识再看本文。本文用到了大...
阅读全文
posted @
2010-06-03 00:05
carekee
阅读(3263)
推荐(0) 编辑
文件操作小结
摘要:文件操作在编程的过程中,文件的操作是一个经常用到的问题,在VC++中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是:1、基于C的文件操作;2、基于C++的文件操作;3、基于WINAPI的文件操作;4、基于MFC库的文件操作。5、Unix\Linux文件操作一、基于C的文件操作clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include<st...
阅读全文
posted @
2010-06-02 00:34
carekee
阅读(2820)
推荐(1) 编辑
用VC++5.0 实 现 多 线 程 的 调 度 和 处 理
摘要:一 多 任 务, 多 进 程 和 多 线 程---- Windows95 和WindowsNT 操 作 系 统 支 持 多 任 务 调 度 和 处 理, 基 于 该 功 能 所 提 供 的 多 任 务 空 间, 程 序 员 可 以 完 全 控 制 应 用 程 序 中 每 一 个 片 段 的 运 行, 从 而 编 写 高 效 率 的 应 用 程 序。---- 所 谓 多 任 务 通 常 包 括 这 ...
阅读全文
posted @
2010-06-02 00:07
carekee
阅读(395)
推荐(0) 编辑
用 Thunk 实现 COM 的挂钩
摘要:COM 的挂钩其实已经是一个很古老的话题了,其核心技术就是替换 COM 对象虚表中相应位置的函数指针,从而达到挂钩的效果。顺便说一句,这个方法和内核的 SSDT 挂钩是十分类似的。其相应的实现代码也十分简单,如下所示:view plaincopy to clipboardprint?typedef struct _tagHookHelper { PVOID* vptr; } HOOKHELPER...
阅读全文
posted @
2010-06-02 00:00
carekee
阅读(226)
推荐(0) 编辑
__purecall 链接错误
摘要:不知道诸位有没有过这样的经历:本是简单合法的 C++ 代码,但编译链接的时候却出现了如下的链接错误:> error LNK2001: 无法解析的外部符号 __purecall在解决这个问题之前,我们可以一起重现这个错误,先。新建一个 Win32 工程,打开 VS 的工程设置,修改如下项目:将“启用 C++ 异常”设为“否”;将“基本...
阅读全文
posted @
2010-06-01 23:59
carekee
阅读(1354)
推荐(0) 编辑
C++析构函数妙用-- 不会忘记的Unlock
摘要:在C++中,类的析构函数被解释为用于销毁 对象的代码块,在对象将被从内存中清除之前调用。而事实上,利用析构函数的调用时机,可以做很多普通的过程控制代码很难做到的 事情。比如在多线程程序中的锁。在加锁和开锁的过程中,必须非常小心地配对,稍有不慎就 会少了开锁次数,使资源锁得不到打开。在有复杂控制的程序体中,这种维护是很烦琐的。以Windows程序为例,在类 CWithLock中使用临界区定义一个锁,...
阅读全文
posted @
2010-06-01 22:17
carekee
阅读(1708)
推荐(0) 编辑
如何在C++中动态分配二维数组
摘要:一般是三种方法:(1)用vector的vector,(2)先分配一个指针 数组,然后让里面每一个指针再指向一个数组,这个做法的好处是访问数组元素时比较直观,可以用a[x][y]这样的写法,缺点是它相当于C#中的一个锯齿 数组,内存空间不连续。(3)直接分配一个x*y大小的一维数组,这样保证空间是连续的,但访问数组元素不直观。对于我这个“经典”回答,我那时还一直是 挺得意的,...
阅读全文
posted @
2010-06-01 22:15
carekee
阅读(953)
推荐(1) 编辑
小函数,大问题(strcpy,sprintf,strcat)
摘要:对于strcpy,sprintf,strcat这些不安全的函数的讨论应该算是不少了,大家都知道可以用strncpy,snprintf和strncat来替换它们。但实际工作中似乎这些“安全版”的函数带来的疑惑还是不小,总结了一下,列在这里。 1.sprintf(char * str, const char * format, ...) -> snprintf(char...
阅读全文
posted @
2010-06-01 22:14
carekee
阅读(3343)
推荐(1) 编辑
谁动了我的指针?
摘要:译者序: 本文介绍了一种在调试过程中寻找悬挂指针(野指针)的方法,这种方法是通过对new和delete运算符的重载来实现的。 这种方法不是完美的,它是以调试期的内存泄露为代价来实现的,因为文中出现的代码是绝不能出现在一个最终发布的软件产品中的,只能在调试时使用。 在VC中,在调试环境下,可以简单的通过把new替换成DEBUG_NEW来实现功能更强更方便的指针检测,详情可参考MSDN。DEBU...
阅读全文
posted @
2010-06-01 22:14
carekee
阅读(273)
推荐(0) 编辑
Visual C++的“虚拟属性”功能
摘要:译者注: 本文简单介绍了使用Microsoft Visual C++中的__declspec关键字来实现“属性(Property)”这个C++中没有的特性的方法。有关__declspec关键字的更详细的信息,可以参考MSDN。 __declspec关键字不是标准C++的一部分,因此这种实现“属性”的方法只适用于Visual C++,如果想要了解在标准...
阅读全文
posted @
2010-06-01 22:13
carekee
阅读(501)
推荐(0) 编辑