- 博客(32)
- 收藏
- 关注
原创 C++11 多线程
新特性之描述:虽然 C++11 会在语言的定义上提供一个内存模型以支持线程,但线程的使用主要将以 C++11 标准库的方式呈现。C++11 标准库会提供类型 thread (std::thread)。若要运行一个线程,可以创建一个类型 thread 的实体,其初始参数为一个函数对象,以及该函数对象所需要的参数。通过成员函数 std::thread::join() 对线程会合的支持,一个线程
2013-06-19 14:16:04
4173
转载 算术移位与逻辑移位有什么区别?
逻辑移位(不管是左移位还是右移位) 都是空缺处补0 例如: mov ax , 1100_0111_0110_1000B mov cl , 3 shl ax , cl ;
2013-03-26 20:28:51
1584
转载 堆排序
#define HEAP_SWAP(a,b) \ do \ {\ int t = a;\ a = b;\ b = t;\ } while (0);// array是待调整的堆数组,i是待调整的数组元素的位置,nlength是数组的长度void HeapAdjust(int array[],int i,int nLength)//本函数功能是:根据数组array构建大根堆{
2012-06-28 15:14:43
636
原创 内存泄露打印new和delete重载
#define TRACE_MEM #ifdef TRACE_MEM#define MEM_NEW new(__FILE__, __LINE__)#define MEM_DELETE delete#else#define MEM_NEW new#define MEM_DELETE delete#endif#ifdef TRACE_MEMinline void * __cdec
2012-06-01 18:05:50
526
原创 凸包
CPoint basicXY;// 查找基准点CPoint CH_FindBasicPoint(std::list& ptSet){ float tempX = 0.0f; float tempY = 0.0f; std::list::iterator pt = ptSet.begin();; tempX = pt->x; tempY = pt->y; // 先找到最小Y
2011-12-23 21:35:20
455
原创 曲面重复纹理填充
#include #include #include GLfloat ctrlpoints[2][3][3] = { {{-1.5,0,0.0},{0,1,0.0},{3,0,0.0}}, {{-1.5,-2,0.0},{0,-3,0.0},{3,-2,0.0}}};GLfloat texpts[2][2][2] = {{{0.0, 0.0}, {0.0, 20.0}},
2011-12-14 15:40:29
1253
转载 线段树
1、概述线段树,也叫区间树,是一个完全二叉树,它在各个节点保存一条线段(即“子数组”),因而常用于解决数列维护问题,它基本能保证每个操作的复杂度为O(lgN)。2、线段树基本操作线段树的基本操作主要包括构造线段树,区间查询和区间修改。(1) 线段树构造首先介绍构造线段树的方
2011-07-28 15:20:55
1429
原创 位操作
<br />#include "stdio.h"#include "stdlib.h"/*--------------------------------------------------------------位操作假设你工作在一个32位的机器上,你需要将某一个外设寄存器的第X位设置成0(最低位为第0位,最高位为第31位),将第Y位开始的连续三位设置成110(从高位到低位的顺序),而其他位保持不变。对给定的寄存器值R,及X,Y,编程计算更改后的寄存器值R。Input
2010-12-31 10:42:00
867
原创 大整数乘法
#include "stdio.h"#include "stdlib.h"#include "string.h"/*----------------------------------------------大整数乘法在计算机中,长整型(long int)变量的范围是 -2147483648 至 2147483647,因此若用长整型变量做乘法运算,乘积最多不能超过 10位数。即便用双精度型(double)变量,也仅能保证 16 位有效数字的精度。在某些需要更高精度的乘法运
2010-12-30 11:28:00
571
原创 蛇行矩阵
<br />#include <iostream>using namespace std;/*---------------------------------------------------------蛇行矩阵Problem蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。Input本题有多组数据,每组数据由一个正整数N组成。(N不大于100) Output对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。 矩阵三角中同一行的数
2010-12-29 15:48:00
594
原创 母牛生小牛[特殊的斐波那契数列]
<br />#include <iostream>#include "windows.h"using namespace std;/*-----------------------------------母牛生小牛Problem设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛? Input本题有多组数据。每组数据只有一个整数N,独占一行。(1≤N≤50) Output对每组数据,输出一个整数(独占一行)表示第N年时母牛的数量
2010-12-28 14:49:00
1017
原创 指针与引用的区别
<br /><br />1.引用是对象的一个别名<br />int a = 1;<br />int& b = a;<br />b引用了a,b是a的一个别名<br /> <br />2.不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)<br />int& a = NULL; //错误<br />int* b = NULL;//正确<br /> <br />3.引用被创建的同时必须被初始化,一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)<br />以下示例程序
2010-12-13 16:32:00
330
原创 符号位
PF是奇偶标志 AF是辅助进位标志 ZF是零标志 SF是符号标志 CF:(carry Flag)进位标记,指两进制补码算法产生了进位,也就是最高位,无符号 附注:AF是BCD的进位标记OF:(Overflow Flag)溢出标记,指数值过大溢出了,有符号有“数值”含义,有符号“进位与符号无关,溢出与符号有关
2010-11-22 17:21:00
2036
原创 ENTER 和 LEAVE
释放当前子程序在堆栈中的局部变量,使BP和SP恢复成最近一次的ENTER指令被执行前的值。ENTER指令相当于PUSH BPMOV BP,SP LEAVE相当于:MOV SP,BPPOP BP
2010-10-09 17:10:00
544
原创 标志位详解
进位标志CF(Carry Flag)的定义:当加减运算结果的最高有效位有进位(加法)或借位(减法)时,将设置进位标志为1,即CF=1;如果没有进位或借位,则设置进位标志为0,即CF=0。这是说,处理器执行一个加法或者减法指令,对两个数据进行了相加或者相减,除了一个和值或者一个差值外;如果出现最高位的进位或者借位,在标志寄存器中的这个进位标志CF位就被处理器设置成为1。假设处理器执行二进制8位数据加法指令,实现8位二进制数:00111010和01111100相加。运算结果是:1011011
2010-09-20 10:58:00
2966
原创 内存池实现
/** C内存池实现代码 * 作者:WDL* 出处:http://blog.youkuaiyun.com/wuleibilly3* 转载请注明本博客*///内存池typedef struct _MemTable MemTable;typedef struct _MemPool MemPool;typedef struct _MemNode MemNode;typedef struct _CheckAvail CheckAvail;#define MIN_M
2010-09-17 16:31:00
461
原创 字符串哈希函数
字符串哈希函数 (著名的ELFhash算法)int ELFhash(char *key) { unsigned long h=0; while(*key) { h=(h unsigned long g=h&0Xf0000000L; if(g) h^=g>>24; h&=~g; } return h%MOD; }
2010-09-13 12:02:00
390
原创 CMP详解
cmp(compare)指令进行比较两个操作数的大小例:cmp oprd1,oprd2它影响flag的CF,ZF,OF,AF,PF我们怎么判断大小呢?若执行指令后ZF=1 这个简单,则说明两个数相等,因为zero为1说明结果为0当无符号时:若 CF=1 则说明了有进位或借位,cmp是进行的减操作,故可以看出为借位,所以,此时oprd1CF=0 则说明了无借位,但此时要注意ZF是否为0,若为0,则说明结果不为0,故此时oprd1>oprd2当有符号时:若SF=0,OF=0 则说明了此时的值为正数,没有溢
2010-09-02 14:40:00
2468
转载 指令: JO、JNO、JB、JNB、JE、JNE、JBE、JA、JS、JNS、JP、JNP、JL
名称 功能 操作数 操作码 模数 寄存器1 寄存器2或内存 位移量 立即数 符号 方向 芯片型号 16位 32位 JO 溢出跳转 短 $70 无 无 无 无 10 无 无 8086 无 无 JNO 不溢出跳转 短 $71 无 无 无 无 10 无 无 8086 无 无 JB 低于跳转 短 $72 无 无 无 无 10 无 无 8086 无 无 JNB 不低于跳转 短 $73 无 无 无 无 10 无 无 8086 无 无 JE 相等跳转 短 $74 无 无 无 无 10 无 无 8086 无
2010-08-27 10:51:00
4327
原创 避免内存碎片的小技巧
建立一个结构体里面包含一个指针用来存放数据。最初的定义是这样的typedef struct _NODE{ char *pData; int nLength;} Node;使用的时候:Node *pNode = (Node*)malloc(sizeof(Node));pNode->Data = (char*)malloc(pNode->nLength);这样是没有任何问题的,但是却有内存碎片的产生,本来这个pNode 和 p->Data就是一起用的,所以最好分配到一个内存的地方。解决办法:type
2010-08-25 19:06:00
452
转载 C++函数参数中的省略号
C++允许定义形参个数和类型不确定的函数。例如,C语言中的标准函数printf便使用这种机制。在声明不确定形参的函数时,形参部分可以使用省略号“…”代替。“…”告诉编译器,在函数调用时不检查形参类型是否与实参类型相同,也不检查参数个数。例如:void ConnectData(int i,...)在上面的代码中,编译器只检查第一个参数是否为整型,而不对其他参数进行检查。对于可变参数的函数,需要进行特殊的处理。首先需要引用 头文件,然后利用va_list类型和va_start、va_arg、va_end 3个
2010-08-20 09:54:00
314
原创 C++四种类型转换
dynamic_cast:通常在基类和派生类之间转换时使用const_cast:常量转换成非常量static_cast:通用转换,转换时 会做必要的分析reinterpret_cast:不进行分析 直接将二进制数据 拷贝过去
2010-07-24 14:37:00
282
原创 比较字符串不区分大小写
int compareAb(const char* dst,const char* src){unsigned char s_tolowerTable[256];for(int i = 0; i s_tolowerTable[i] = (unsigned char)tolower(i);//不区分大小写进行比较 知道完全匹配结束 或 中途不匹配结束for( ; *dst && *src && s_tolowerTable[(unsigned char)(*dst)] == s_t
2010-07-19 10:05:00
1149
原创 样条曲线
typedef struct _Point{ float x; float y;}Point;float Fac(int n){ if(n == 0) { return 1; } return n * Fac(n-1);}float pow(float x,int y){ if(y == 0) { return 1; } return x*pow(
2010-06-22 11:28:00
447
原创 使用宏技巧
技巧一:把枚举值转换成字符串#define CaseEnum(a) case(a):LogMsgToFile(#a,id,time)switch(msg_passed_in){ CaseEnum(MSG_YouWereHit); ReactToHit(); break;} 技巧二:利用二进制表达式得到编译期常量#define cat(a,b)
2010-02-27 21:54:00
568
原创 通过进程名获取进程PID
/*用CreateToolhelp32Snapshot进行对系统所有进程进行快照,然后利用Process32First取得第一个进程句柄,然后把得到的PROCESSENTRY32结构体中的szExeFile就是进程名进行比较,利用Process32Next进行循环比较,具体用法看msdn,就可以得到进程句柄了,,,附上C/C++代码:*/#include#include#inclu
2009-07-29 06:25:00
11268
4
原创 多线程同步
#include #include #include //缺少将出现error C2039: _beginthreadex : is not a member of `global namespace, long int one=0,two=0; CRITICAL_SECTION g_cs; UINT WINAPI Threahfun(LP
2009-07-29 06:21:00
970
原创 变速齿轮
/*变速齿轮原理是,游戏在刷新画面时会用到时钟来控制刷新速度,有过游戏开发的人都知道,一般游戏锁定1秒30帧,这样会很流畅,人眼有视觉停顿,当速度达到1秒16帧的时候,就是在跑动画了,游戏用到的计时器有大部分是两个windows提供的api函数,一个是::GetTickCount,一个是::timeGetTime,这两个api的原型请查msdn,我们利用hook api 去修改它的值,从而改变
2009-07-18 16:03:00
11397
2
原创 HOOK全局键盘钩子
/*******KeyHookLib.h文件*********/ // 定义函数修饰宏,方便引用本DLL工程的导出函数 #ifdef KEYHOOKLIB_EXPORTS #define KEYHOOKLIB_API __declspec(dllexport) #else #define KEYHOOKLIB_API __declspec(dllimport) #endif // 声明要导出的函数
2008-09-02 19:13:00
2236
1
原创 远程注入线程
#include #include #include #include using namespace std;class InjectionRemoteThread{public: InjectionRemoteThread(const char *FileName,const char *DllName); DWORD GetProcessID(); //获
2008-08-28 02:11:00
776
原创 通讯录管理程序
#include #include #include #include using namespace std; //定义文件名#define FileName "data.txt" //定义循环变量bool mVal=true; //定义个新的变量typedef string mData;typedef char mChar[50
2008-08-28 02:03:00
959
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人