博文
[编程思想]大道至简--是懒人造就了方法(强烈推荐) (2006-08-10 16:10:00)
摘要: 第2章 是懒人造就了方法
“僰蘭道有蜀王兵 ,亦有神作大滩江中。其崖崭峻不可破,(冰)乃积薪烧之。”
——《华阳国志》
1. 是懒人造就了方法
......
[编程思想]大道至简--编程的精义(强烈推荐) (2006-08-09 23:47:00)
摘要: 大道至简
——软件工程实践者的思想
周爱民(Aimingoo) 著
 ......
[WIN编程]WINDOWS数据类型的转换大全(转)(2006-08-07 22:28:00)
摘要:
由Thinkboy提供
WINDOWS数据类型的转换
一、其它数据类型转换为字符串
短整型(int)
itoa(i,temp,10);//将i转换为字符串放入temp中,最后一个数字表示十进制
itoa(i,temp,2); //按二进制方式转换
长整型(long)
ltoa(l,temp,10);
浮点数(float,double)
用fcvt可以完成转换,这是MSDN中的例子:
int decimal, sign;
char *buffer;
double source = 3.1415926535;
buffer = _fcvt( source, 7, &decimal, &sign );
运行结果:source: 3.1415926535 buffer: '31415927' decimal: 1 sign: 0
decimal表示小数点的位置,sign表示符号:0为正数,1为负数
CString变量
str = "2008北京奥运";
buf = (LPSTR)(LPCTSTR)str;
BSTR变量
BSTR bstrValue = ::SysAllocString(L"程序员");
char * buf = _com_util::ConvertBSTRToString(bstrValue);
SysFreeString(bstrValue);
AfxMessageBox(buf);
delete(buf);
CComBSTR变量
CComBSTR bstrVar("test");
char *buf = _com_util::ConvertBSTRToString(bstrVar.m_str);
AfxMessageBox(buf);
delete(buf);
_bstr_t变量
_bstr_t类型是对BSTR的封装,因为已经重载了=操作符,所以很容易使用
_bstr_t bstrVar("test");
const char *bu......
[Win编程]pragma指令简介(转)(2006-08-07 22:15:00)
摘要:由Thinkboy提供
pragma指令简介
在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作.
下面介绍了一下该指令的一些常用参数,希望对大家有所帮助!
一. message 参数。
message
它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:
#pragma message(“消息文本”)
当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。
当我们在程序中定义了许多宏来控制源代码版本的时候,我们自己有可能都会忘记有没有正确的设置这些宏,此时我们可以用这条指令在编译的时候就进行检查。
假设我们希望判断自己有没有在源代码的什么地方定义了_X86这个宏可以用下面的方法
#ifdef _X86
#pragma message(“_X86 macro activated!”)
#endif
当我们定义了_X86这个宏以后,应用程序在编译时就会在编译输出窗口里显示“_ X86 macro activated!”。我们就不会因为不记得自己定义的一些特定的宏而抓耳挠腮了
二. 另一个使用得比较多的#pragma参数是code_seg。
格式如:
#pragma code_seg( [ [ { push | pop}, ] [ identifier, ] ] [ "segment-name" [, "segment-class" ] )
该指令用来指定函数在.obj文件中存放的节,观察OBJ文件可以使用VC自带的dumpbin命令行程序,函数在.obj文件中默认的存放节为.text节
如果code_seg没有带参数的话,则函数存放在.text节中
push (可选参数) 将一个记录放到内部编译器的堆栈中,可选参数可以为一个标识符或者节名
pop(可选参数) 将一个记录从堆栈顶端弹出,该记录可以为一个标识符或者节名
identifier (可选参数) 当使用push指令时,为压入堆栈的记录指派的一个标识符,当该标识符被删除的时候......
[Win编程]Windows消息大全(转)(2006-08-07 22:12:00)
摘要:由Thinkboy提供
表A-1 Windows消息分布
消息范围
说 明
0 ~ WM_USER – 1
系统消息
WM_USER ~ 0x7FFF
自定义窗口类整数消息
WM_APP ~ 0xBFFF
应用程序自定义消息
0xC000 ~ 0xFFFF
应用程序字符串消息
> 0xFFFF
为以后系统应用保留
表A-2 常用Windows消息
消息名称
值
说 明
WM_NULL
0x0000
空消息,此消息将被接收窗口忽略
WM_CREATE
0x0001
应用程序创建一个窗口
WM_DESTROY
0x0002
一个窗口被销毁
WM_MOVE
0x0003
移动一个窗口
WM_SIZE
0x0005
改变一个窗口的大小
WM_ACTIVATE
0x0006
一个窗口被激活或失去激活状态
WM_SETFOCUS
0x0007
获得焦点后
WM_KILLFOCUS
0x0008
失去焦点
WM_ENABLE
0x000A
应用程序Enable状态改变时产生
WM_SETREDRAW
0x000B
设置窗口是否能重画
WM_SETTEXT
0x000C
应用程序发送此消息来设置一个窗口的文本
WM_GETTEXT
0x000D
应用程序发送此消息来复制对应窗口的文本到缓冲区
WM_GETTEXTLENGTH
0x000E
得到与一个窗口有关的文本的长度(不包含空字符)
WM_PAINT
0x000F
要求一个窗口重绘自己
WM_CLOSE
0x0010
当一个窗口或应用程序要关闭时发送一个信号
WM_QUERYENDSESSION
0x0011
用户选择结束对话框或应用程序自......
[C++]编程入门必做的题第1,2题思路.(2006-08-01 13:12:00)
摘要:第一题:
/* 题目:
1. 给定等式 A B C D E 其中每个字母代表一个数字,且不同数字对应不
D F G 同字母。编程求出这些数字并且打出这个数字的
+ D F G 算术计算竖式。
───────
X Y Z D E
*/
/* 分析:
1: 由G + G = E和F + F = D,知G = 0,F = 5. 如果G = 5则F + F != D,因为G + G会进一.
2: ABC + D + D = XYZ,知C + D + D会进2, 得C + D + D + 1(F+F进位的1) > 20, 而B + 2(前面进位的2)又要进1, 可知B = 9,Y = 1,( B != 8,因为如果B = 8, 则Y就会等于0, 而与G = 0 相矛盾). 也知 A = X - 1;
通过上2步,得出的结果是G=0, F=5, B=9, Y=1, A=X-1, C+D+D+1>20;
......
[C++]A* 算法之误区(转自云风)(2006-07-30 21:30:00)
摘要:
估计是因为我在上大学时在网上留过一篇文章,里面有一个简单的使用 A* 算法寻路的源程序,导致了这近七年来,不段的收到 email 和我讨论这个算法。
对,毫不夸张。那个简陋的代码。在七年前我随手写出来扔在网上后,已经遍布中文网络世界的犄角旮旯,让我在痛恨那段代码的时候,想收回都不可能。
我最大的困惑在于,为什么课堂上最为基础的算法知识,却有如此多的人行入误区。难道写游戏的程序员都不去读读基本的课本?
A* ,读作 A-Star 。它仅仅是一个启发式搜索算法。就是说在一个可以被穷举的有限解空间集中,用比较有效的方法(主要是利用估价函数)求出最优解的算法。A* 跟寻路算法没有太多关系,我们只是借助了这个方法来解决寻路这个问题,正如四则运算对于无数的数学题一样,它只是一个基本工具。寻路算法本身有很多种,我们找到算法后,借助 A* 这个工具实现这个算法而已。
我的那篇文章中提到的,也是传统意义上的地图寻路,其实依据的是这样一种算法:把地图分成若干个格子,把起始点的格子上标作 0 。然后根据将周围一圈可以通畅的格子上标为1。然后再把所有标上 1 的格子周围可以通达的格子标为 2 ,当然,如果那些格子上已经有过数字了(一定比 2 小)就不用标了。
如此反复跌代下去,我们地图上的终点只要可以通达,就一定会被标上数字。而这个数字就是理论最短的距离,而标记过的每个格子都有一个前导的入口(即它由附近一个比它小 1 的格子引导过来)整个标记的过程逆推,也就找到了最短路径。
这种一步步尝试的过程,就是一种搜索过程。如果加上启发函数,不让它盲目的寻找,就衍生出很多启发式搜索算法。A* 是其中的一种。之所以加一个 * 号,是因为它的启发式函数是有限制的,这个限制确保它能找到绝对最优解,去掉这个限制,就是 A 算法了。
我们可以看到,把地图分格子,给格子间的路径一个权值(前面的例子中,格子间的距离都是相等的,我们也可以根据地形划分成不等的距离,即权值,或者定义单向道路,这都是可以的),这是解决寻路问题的关键,但都不是 A* 算法的范畴。
如果你想出某种算法,比如把地图划分成不规则的区域,或者把地图矢量化。依然可以再此基础上用 A* 算法这个工具来从中求到最优解。如果想别的方法来寻路,比如拟人的判断,预设路点等等,甚至按走迷宫的方法一样,分叉右转,碰壁回头,那些可以算是......
[C++]2005“现代C++设计与编程”讲师讲义下载(2006-07-13 00:19:00)
摘要:2005 "现代C++设计与编程" 技术大会 讲师讲义开放下载:
Bjarne Stroustrup
《Direction for C++0x》
云风
《游戏的优化》
孟岩
《什么是高级C++》
荣耀
《C++模板元编程技术与应用》
陈榕
《面向目标代码编程与C++的未来》
李建忠
《C++/CLI:建立本地世界与托管世界互通的桥梁》
张银奎
《C++异常处理得与失》
温昱
《架构设计:策略与过程》
何宗键
《C++在嵌入式系统中的运用》
鲍志云
《用C++开发高性能服务器端网络应用程序》
黄飞龙
《多核技术与C++并发编程》
王旭
《基于C++的网游服务器中间件模型》因牵扯到相关公司机密,不便公开。
有2,3篇讲义是英文的,看来要补下英文了,不然看不懂。。。 ......
[C++]初步掌握类和对象阶段一(2006-07-12 22:48:00)
摘要:初步掌握类和对象分三阶段来讲解:
第一阶段讲解:定义类,访问类数据成员和方法,在栈或堆上创建对象。
第二阶段讲解:类的构造函数, 析构函数。
第三阶段讲解:类的复制构造函数,赋值操作符。
之所以分为三个阶段来讲解是因为讲解的东西比较多和细,特别是第二阶段和第三阶段有很多细小的东西需要分析,不会一步概括。让你明白为什么会这样。。 口水话讲完。呵呵。 进入正题。
如果你对栈或堆没有初步的认识,可以看[C++]栈和堆原理介绍。
首先让我们来看下类是怎么定义的:
class 类名 &nb......
[C++]文件输出的怪异(BUG)之处(2006-07-08 19:32:00)
摘要:PS: 本来想写一个文件分割的程序,复习了下文件的输入输出,结果被偶发现了这个怪异之处。。呵呵
#include <fstream.h>
// 写入
int main( void )
{
char *name = "heshaohua";
int age = 21;
float salary = 2000;
ofstream fout("Text.txt"); // 打开文件写入
// 写入资料
fout << "此行写入了Test.txt中\n"; // 次句话长度为20,后面有用。
fout << name << " " << age << " " << salary;
fout.close();
return 0;
}
===================================================================
#include <fstream.h>
// 读取
int main( void )
{
char line[1]; // 读取“此行写入了Test.txt中”这句话
char name[10]; // 读取姓名
int age;
float salary;
char *test......