- 博客(22)
- 收藏
- 关注
原创 lua_tinker浅析
Lua也用了有段时间了,lua跟c++的交互以前用的是lua_bind,但是需要boost库,太大了,我的需求也没那么多。所以项目引入lua的时候,我决定找个简单点的库,这时候发现了lua_tinker,很小巧,就两个文件一个.h和.cpp,引入也很方便。网上看了看教程,我要的功能都有了,就是它了。用了这么长时间,也没仔细研究研究,也就是机械的用而已,这样可不行。花了两天时间研究它,下
2014-10-21 21:56:24
1087
原创 简单的内存泄露检查工具
最近工作挺忙,博客也好久没更新,这可不是什么好事,写博客的习惯还是得坚持的。前几天无聊,就写了一个简单的内存泄露检测工具。原理很简单,直接上代码吧。.h文件#ifndef _Z_NEW_H_#define _Z_NEW_H_#if defined MEM_DEBUG#include #include #include class MemRec{
2011-12-05 18:58:43
493
原创 CEGUI中的消息提示类messagebox
前段时间一直在看CEGUI,研究samples的时候,想随便改改代码,发现类似windows中的消息提示函数或类,是没有的,需要自己写。就简单的写了一个.h文件代码//start of namespace MYTESTnamespace MYTEST{ //
2011-10-17 13:31:58
717
原创 算法导论 二叉查找树
在二叉查找树进行基本操作的时间与树的高度成正比。二叉查找树基本性质:设x为树中某个结点。如果y是x的左子树中的一个结点,则key[y] 二叉查找树基本操作:1.在二叉查找树中查找某个给定的key,有递归和非递归的版本。递归:根据二叉查找树的性质,在某个结点左子
2011-07-05 21:23:51
364
原创 算法导论 计数排序
不管所堆排序,还是快速排序,排序的本质都所基于各个元素之间的比较。而可以证明的是,所有基于比较的排序算法,在最坏情况下的时间复杂度的下界是O(nlgn)。 而,计数排序不所基于元素之间的比较,而是,对于一个输入x,在整个输入中确定出小于x的元素个数,这样就可以把元素x直接放在它在最终输出数组中的确定位子上。 基本思想:所有输入放入数组A中(元素下标从1开始)最终输出在数组B
2011-06-15 22:01:00
334
原创 算法导论 习题 6.5-8
题:请给出一个时间为O(nlgk)、用来将k个已排序链表合并为一个排序链表的算法。此处n为所有输入链表中元素的总数。(提示:用一个最小堆来做k路合并) k个已排序链表,假设每一个链表的第一个元素为root(i) (i = 1,2,3...k)。那么可以为这k个元素root(i)构造一个最小堆Heap_Min,其时间复杂度为O(lgk)。此时堆顶元素假设为root(x),根
2011-06-03 22:06:00
550
原创 算法导论 堆排序
堆的基本概念:堆是一个完全二叉树,用数组来存储这个结构的时候,A[1...length[A]]可以表示有效值,但heap_size[A]以外的值都不是属于堆的,可以视为无效值。 对于数组中下标为i的元素,根据二叉树的性质可以得到:其父节点下标为,P = n/2(下取整)左孩子: L = 2*i右孩子: R = 2*i + 1 最大堆:除了根节点外的每个节点i,
2011-06-03 15:50:00
497
原创 算法导论 习题 5.4-4
<br />题:<br />一个聚会需要邀请多少人,才能让其中很可能有3人的生日相同?<br /> <br />解:<br />设房间人数为m,一年有n天<br />1<= i <= m,1<= r <= n<br /> <br />Pr{bi=r} = 1/n;<br />Pr{bi=r and bj=r and bk=r} = Pr{bi=r} * Pr{bj=r} * Pr{bk=r} = 1/n^3;<br />Pr{bi=bj=bk} = ∑Pr{bi=r and bj=r and bk=r} (
2011-05-31 13:49:00
905
原创 算法导论 习题 5.4-1
<br />题:<br />一个房间里必须要有多少人,才能让某人和你生日相同的概率至少为1/2?必须要有多少人,才能让至少两个人生日为7月4日的概率大于1/2?<br /> <br />解:<br />1.假设一年有n(365)天,房间里面有x人(不算自己)<br />为求某人与自己生日相同,可求其反面,即房间里面没人跟自己生日相同,他们每个人生日可以在n天中选择除去我生日剩下的n-1天<br /> Pr{bi=r}= (n-1)/n;<br /> Pt = IIPr{bi} (i = 1,2,...x);
2011-05-31 12:57:00
1467
原创 汇编中的结构体表示
<br />我认为,汇编中一切皆地址。<br />在c/c++使用很多的结构体,在汇编中是如何表示的呢?其实,在汇编中根本就没有什么结构体的概念,结构体本质就是一堆连在一起的数据。只不过有人把他们想象成一个整体,并以此产生结构体的概念,这与结构体中带有变长数组时候的情形一样:<br />struct Test{ int x; char c; int cnt; int data[0]; Test() { x = 0;
2011-05-18 20:02:00
5822
原创 汇编中的除法指令
AT&T汇编中的除法指令也分为两种:signed、unsignedunsigned:divdivisor//除数 a 8、16、32-bits register or memory value被除数隐含的放在ax、dx:ax、edx:eax中其中,除数的大小依据被除数大小有限制1.如果被除数是16bits,那么除数最大只能是8bits2.同理,被除数是32bits,那么除数最大是16bits3.同理,被除数的64bits,那么除数最大是32bitsdiv指令后缀依据divisor大小变化。除法指令的结果分为
2011-05-09 14:52:00
7511
1
原创 汇编中的乘法指令
汇编中的乘法指令分为signed、unsigned指令两种。unsigned:mulsource//the source can be a 8、16、32-bits unsigned register or memory value你可能在想,只有一个数怎么进行乘法运算呢,其实还有一个乘数已经隐含的放在eax中,其中根据mul指令后缀b、w、l大小放入al,ax,eax中。由于乘法运算后产生的数比其中任何一个都大,所以一般用2倍于source位长的空间存放计算结果。例如:1.如果source是8-bits那
2011-05-09 12:47:00
9789
原创 用select实现I/O多路转接
写网络程序服务器代码时,会遇到同时与多个client进行通信的问题,假如这些与client连接的socket都存储在SockArray[max_num]中,为了接受每个client的数据,可能会这么做:for(int i = 0;i != max_num; ++i) //伪代码{if(SockArray[i]) //array初始化为-1{ int n = recv(SockArray,....); ........}}这样做会遇到一些问题:1.recv函数默认是阻塞
2011-04-29 14:41:00
870
原创 函数返回值如何传递
一般情况下,函数返回值是通过eax进行传递的,但是eax只能存储4个字节的信息,对于那些返回值大于4个字节的函数,返回值是如何传递的呢?假设返回值大小为M字节1. M 2. 4 3. M > 8,如何传递呢?测试代码://test.cppstruct big_thing{ char str[64];};big_thing test(){ big_thing big; big.str[1] = 'c'; return big;}int
2011-04-28 14:54:00
2472
原创 游戏寻路——A*算法
A*其实是一种思想,采用启发式遍历来得到起始点到目标点的路径。A*的基本思想:f(n) = g(n) + h(n);其中,g(n)是从起始点到当前点V的实际代价,h(n)表示当前点V到目标点的代价估计,一般用两点间x,y坐标差的平方和表示。则f(n)值就表示该点的估价值了,f值越低表示该点越优。最佳路径就是一系列最优节点的集合。算法描述:1.把起始点加入到开启列表,开启列表表示将要搜索的点的集合。2.重复如下的工作:a.寻找开启列表中F值最低的点,我们把它称为当前点V。b.把它添加到关闭列表,并把它从开启列
2011-04-25 12:01:00
642
原创 在C/C++中使用lua
<br /><br />(1)编译、安装lua<br />1、在lua官网下载lua源码 xxx..tar.gz<br />解压 tar -xzvf xxx..tar.gz<br />cd xxx //进入解压后的目录<br />ls //可以看见有一个makefile文件<br />2、编译<br />输入 make zzzz //其中zzz为platform 如linux、aix,mac os等<br />3、编译完成 安装<br />输入 make install<br />完成
2011-04-23 12:11:00
490
原创 游戏寻路——深度优先搜索
基本思想: 从起始点开始开始遍历,首先访问起始点V,再访问与V相邻的点W,接着访问与W相邻且没访问过的点,以此类推,直至某个被访问的顶点的所有相邻顶点均被访问为止。 然后退回到尚有相邻顶点未被访问的顶点R,再从R的一个未被访问的顶点出发,重复上述步骤,直至图中所有和V有路径相通的顶点都被访问过。 若图中尚有顶点未被访问,则另选图中一个未被访问的顶点做起始点,重复上述过程直至图中所有顶点都被访问为止。代码://deepsearch.h#ifndef _DEEPSEARCH_H#define _DEEP
2011-04-23 11:17:00
843
原创 如何在窗口中画直线
<br /><br />如何画直线,看起来似乎很简单,拿个直线方程,遍历X求出Y,再把对应点画出来不就行了么,嘿嘿,没那么简单~<br />平时我们所说的直线是在实数域的,也就是说对应的Y可能是小数,而在屏幕上,所画直线是基于正整数域的,那么根据直线方程如何画直线呢?<br />先考虑斜率 0 < k < 1的情况<br />1.Bresenham算法<br />该算法由Bresenham在1965年发明,它到底做了什么事呢?其实想法很简单,就是每X移动一个像素,则考虑Y应该是如何移动。<br />由于由(
2011-04-23 10:57:00
881
原创 一个简易的配置类及其实现
<br /><br />配置文件基本格式:<br />//test.ini<br />[hello]<br />name = zhangsan<br />sex = M<br />[world]<br />//this is a comment<br />key = value<br />配置文件由<br />段名:如,hello等<br />键名:如,name等<br />值,如,zhangsan等构成<br />其中"="左右为制表符分隔<br />由"//"打头的注
2011-04-23 10:55:00
464
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人