- 博客(32)
- 资源 (10)
- 收藏
- 关注
原创 构造函数中调用虚函数
在生成派生类Derive的实例时,由Derive的构造函数来调用Base的构造函数先完成基类Base的构建。Base的构造函数中调用虚函数Foo,此时从虚函数表中获取的只能是Base类的虚函数表的地址,因此虚函数Foo绑定的是Base类的Foo,只能执行Base的Foo。
2015-02-02 19:41:21
598
原创 链表宏
#define Destroy(_p) {if (((layer_type *)(_p))->Canvas != NULL) delete[] ((layer_type *)(_p))->Canvas; free(_p);} #define Destroy_(Head, _p) {if (((layer_type *)(_p))->src == (ListNode *)((layer_ty
2015-01-27 21:24:18
460
原创 c++类模板特例化
#include #include using namespace std;template class A{ public: A(){cout << typeid(*this).name() << " construction" << endl;} ~A(){} T1 m_a1; T2 m_a2; T3 m_a3;};
2015-01-18 15:27:55
1946
原创 __declspec(naked) int add(int a, int b)
__declspec(naked) int add(int a, int b){ _asm { mov eax, dword ptr [esp + 0x4] add eax, dword ptr [esp + 0x8] ret }}因为函数开头没有push ebp mov ebp, espebp没有入栈,所以函数参数
2013-08-12 10:45:35
533
原创 Photoshop马赛克效果
void _alpha__fastcall_pre_ TAlpha::Mosaic(AlphaPara *Para){ int left; int top; int right = (left = Para->X) + Para->Width - 1; int bottom = (top = Para->Y) + Para->Height - 1; int linebyte
2013-01-05 14:10:50
496
原创 单图处理的接口函数 Process_Plus
void TAlpha::Process_Plus(HDC hdc, int X, int Y, int Width, int Height, typeprocess_plus_op_fun_ptr op_fun_ptr, void *funPara){ Process_PlusPara pluspara; AlphaPara para; para.X = X; para.
2013-01-04 21:31:01
406
原创 TAlpha类的灰色浮雕处理函数GrayEmboss_1000
//灰色浮雕[maxwidth:1000]void TAlpha::GrayEmboss_1000(byte &r, byte &g, byte &b, byte &a, int x, int y, int width, int height, void *Para){ const int maxsize = 1000; static byte rgb[maxsize];
2013-01-04 14:42:18
556
原创 结构体类型数组int成员变量求和函数
struct stru1{ int a; float b; int c; int d;};struct stru2{ int a; char b[100]; int c; stru1 d;};struct stru1 s1[100];struct stru2 s2[100];...int sum1 = supe
2012-10-10 10:48:18
3146
原创 一维二维数组共用一次new
优化前//非共用的int Height;...const int COL = 3;int *dgree = new int[Height];byte *grgb = new byte[Height * COL];...delete[] dgree;delete[] grgb;优化后//共用的int Height;...
2012-10-01 19:48:51
556
原创 嵌套优化版括号匹配检查
设置三个计数器初值设为零,分别记录小括号、中括号、大括号。开始进行第一次扫描,从左向右依次扫描每个字符,遇到左括号计数器加一,遇到右括号计数器减一,出现计数器小于零时,报错退出。扫描结束后,若三个计数器有一个不为零说明括号不匹配,报错结束检查。 第一步扫描结束,如果正确说明三种括号本身匹配正确。现在可能出现的错误只可能是不同括号出现交叉,比如 {(}{)},({[)]}。
2012-09-09 11:31:02
1111
原创 #if 宏处理循环双流水
#define SIZE 5int a[SIZE] = {1, 2, 3, 4, 5};#if SIZE & 1 //SIZE是奇数 int s = a[0]; for (int i = 1; i < SIZE; i += 2) { s += a[i]; s += a[i + 1]; }#else //SIZE是偶数 int s
2012-08-30 22:36:30
940
原创 MDI切换到上次显示的子窗口
void __fastcall TMainBuilder::mnuWindow_LastVisitedClick(TObject *Sender){ const HWND hwnd = m_hLastActiveChild; if (IsWindow(hwnd)) { bool bmaximized; HWND hwndactivechild = (HWND)
2012-08-28 10:15:14
622
转载 [转]让程序只运行一个实例的四种方法
源代码下载:http://d.download.youkuaiyun.com/down/907655/magictong 综述:让一个程序只运行一个实例的方法有多种,但是原理都类似,也就是在程序创建前,有窗口的程序在窗口创建前,检查系统中是否已经设置了某些特定标志了,如果有说明已经有一个实例在运行了,则当前程序通知用户怎样怎样,然后程序退出,当然方法有这么多,各自也就有自己的优缺点了。 方法一
2012-07-23 20:19:02
292
转载 [转]绝对绝对不要TerminateThread
听过无数次不要TerminateThread,只是工作中常用,貌似也没有什么问题。今天在高强度测试中发现了一个不可原谅的错误。参看下面的例子 DWORD __stdcall mythread(void* ){ while( true ) { char* p = new char[1024]; delete p;
2012-07-23 20:15:03
871
转载 [转]理解EnterCriticalSection 临界区
通俗解释就像上厕所: 门锁了,就等着,等到别人出来了,进去锁上,然后该干什么干什么,干完了,把门打开 门没锁,就进去,锁上,然后该干什么干什么,干完了,把门打开 -------------------------------------------------- 多线程中用来确保同一时刻只有一个线程操作被保护的数据 InitializeCriticalSection(&cs);
2012-07-21 23:17:12
1677
原创 gcc内联汇编将结构体成员清零
typedef struct tagstru{ int a; int b; int c;}stru; stru sa; sa.a = 0x123; sa.b = 0x456; sa.c = 0x789; printf("stru: a=%d b=%d c=%d\n", sa.a, sa.b, sa.c); __asm__ __volati
2012-06-26 17:49:49
1032
原创 void Mask_1 - gcc汇编
void Mask_1(unsigned char * const ptrDestBuffer, const unsigned char * const ptrSrcBuffer, int Width, int Height, int idLineAdd, int isLineAdd, int idPixelAdd, int isPixelAdd, int MaskColor){ cons
2012-06-17 19:41:04
540
原创 内联汇编优化的TAlpha::FillSolidColor
#ifndef __GNUC__ #define _calpha_using_inlineasm_ 1#else #define _calpha_using_gccinlineasm_ 1 #ifdef _calpha_using_inlineasm_ #undef _calpha_using_inlineasm_ #endif#endif
2012-06-16 10:43:44
332
原创 内联汇编优化的TAlpha::Mask 部分汇编
内联汇编优化版 #ifdef _calpha_using_inlineasm_ i = Height - 1; if (i < 0) return; __asm { mov ecx, Width mov eax, ptrDest mov edx, ptrSrc mov esi, i
2012-06-14 13:21:15
753
原创 内联汇编优化的TAlpha::FillSolidColor 部分汇编
if ((lr & 1) == 1) { asm { cld } lr >>= 1; for (; i >= 0; i--) { //memcpy(ptrDest, ptrBuffer, lr); asm { mov ecx, 1 mov esi, ptrB
2012-06-09 15:24:04
489
原创 TAlpha::Negative 部分汇编
Width *= 3; register const int ld = iLineAdd + Width; Width >>= 1; Width--; for (register int i = Height - 1; i >= 0; i--) { register unsigned short int *p
2012-05-28 10:39:56
408
原创 TAlpha::FillSolidColor 部分汇编
for (i = Width - 1; i >= 0; i--) { *((unsigned short int *)ptrDest) = *((unsigned short int *)b
2012-05-28 10:38:53
424
原创 通过GetCurrentObject和GetObject获取和hdc相关的位图对象数据区起始地址
通过windows API当中提供的GetCurrentObject和GetObject两个函数可以直接获取和hdc相关的位图对象数据区起始地址,由此可以直接对位图对象进行读写操作。 代码BITMAP bm;HBITMAP hBitmap = (HBITMAP)GetCurrentObject(hdc, OBJ_BITMAP);if (hBitmap != NULL)
2012-05-10 20:31:43
3636
原创 二叉树计算以结构体数组元素为变量的表达式
有如下结构体的数据typedef struct tagdata{ double a; double b; double c; double d;}data;有数组数据data x[1000];有公式y = (x.a + x.b + x.c + x.d + 100) / 4其中数据对应关系为y[n] = (x[n - 1].a + x[n - 2]
2012-04-10 19:49:42
699
原创 二叉树计算包含函数的中缀表达式
二叉树计算中缀表达式,支持科学计数法,支持前导正负号,支持指数运算符“^”,支持括号,支持函数,具有错误检查。以字符串形式输入。 #include #include #include #include #include #include #include #include #ifdef _WIN32 #include #include
2012-03-28 15:22:32
1220
原创 用动态规划优化老鼠走迷宫中的最短路线解法
#include #include #include #include #include #ifdef _WIN32 #include #endif#ifndef STRICT #define STRICT 1#endif/* 宏DYNAMIC-是否开启动态规划 */#define DYNAMIC 1#define
2012-01-30 11:29:14
2525
原创 老鼠走迷宫算法中的一点优化
老鼠走迷宫的算法当中在搜索路线时,有一些位置是死胡同,事先标记出来可以大大减少无效搜索,提高搜索速度。比如三个方向都是墙壁,只有一个方向可以走通的非起点非终点位置就可以标记出来,在搜索时根本不用再去计算。 原始图 标记图 #include #include #include #ifdef _WIN32 #include void g
2012-01-19 21:55:20
1196
原创 三叉树解2011年度最变态的迷宫难题
问题出处:Matrix67: My Blog ? Blog Archive ? 2011年度最变态的迷宫难题 问题描述:“下面大家将会看到的是一个极其简单而又极其复杂的“迷宫”,这无疑是我在本年度见到的最变态的谜题:从左边入口处的 2011 进去,在迷宫里转悠,最后变成 2012 从右边出来。你可以在迷宫里转圈,可以重复之前走过的路,但不能往回退着走。”
2012-01-14 13:25:33
764
原创 二叉树计算中缀表达式(三)
二叉树计算中缀表达式,支持指数运算符“^”,支持括号,以字符串形式输入。括号通过递归处理。下一步要支持科学计数,处理空格正负号,检查输入错误。#include #include #include #include #include #include #define BRACKETSMARK 0x40#define MAXBUFFERLEN 1024typ
2012-01-09 14:22:16
623
原创 二叉树计算中缀表达式(二)
二叉树计算中缀表达式,支持指数运算符“^”,暂时不支持括号,直接以字符串形式输入。#include #include #include #include #include typedef struct tagbintree{ char op; char level; /* 记录括号 */ double fvalue; struct tagbintre
2012-01-09 13:44:28
572
原创 二叉树计算中缀表达式
二叉树计算中缀表达式,暂时不支持括号,直接以字符串形式输入。#include #include #include #include typedef struct tagbintree{ char op; char level; /* 记录括号 */ double fvalue; struct tagbintree *lchild; struct ta
2012-01-09 13:38:56
876
原创 不用栈检查小括号、中括号、大括号的匹配
设置三个计数器初值设为零,分别记录小括号、中括号、大括号。开始进行第一次扫描,从左向右依次扫描每个字符,遇到左括号计数器加一,遇到右括号计数器减一,出现计数器小于零时,报错退出。扫描结束后,若三个计数器有一个不为零说明括号不匹配,报错结束检查。 第一步扫描结束,如果正确说明三种括号本身匹配正确。现在可能出现的错误只可能是不同括号出现交叉,比如 {(}{)},({[)]}。
2012-01-09 13:28:46
1986
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人