wpcockroach

导航

2012年4月6日 #

Message-Only Windows

摘要: 在Windows平台开发桌面应用程序的时候,经常会遇到这样一种情况:我需要定时做一些事情,但是这些事情是后台的,顶多是做完了通知一下相关的GUI控件进行刷新。使用定时器是一个很直觉型的解决方案。但是不巧的是,在Windows平台,定时器是和窗口消息绑定在一起的。为了解决这个问题,很多人不得不去创建一个隐藏的窗口,通过这个窗口把相关的事情串联起来。我个人认为,这不失为一个好的解决方案。但是对隐藏窗口需要多费一点口舌。为什么这么说呢?很多人(特别是初学者),在创建这种窗口时套用常规的创建窗口的方式,唯一不同的地方是不指定WS_VISIBLE。那这样做到底有什么不好的地方?这可能需要具体问题具体分析 阅读全文

posted @ 2012-04-06 12:05 wpcockroach 阅读(734) 评论(0) 推荐(0) 编辑

2012年4月5日 #

C++ Member Function Pointer

摘要: 说一说C++的成员函数指针。 在刚学C++的时候,一个基本的概念是指针的大小等于机器的字长。因此在32位的机器上,一个指向整型的指针sizeof会返回4。那么,是不是意味所有类型的指针sizeof后,都是4呢? 一般来说,绝对的事情是比较少的,特殊情况总是存在的,那就是成员函数指针。我们从简单的例子一点一点来看这个问题。 案例一: class CBase1 {};typedef void (... 阅读全文

posted @ 2012-04-05 23:04 wpcockroach 阅读(1062) 评论(0) 推荐(0) 编辑

2009年3月26日 #

C/C++ TIPS

摘要: List some tips when using C/C++.Use std::sort instead of qsort (At least, in Visual C++). This is because std::sort is faster than qsort. Keys in an associative container are immutable. Keep it in mind, expecially when you are using std::set and std::multiset. Also, iterator and const_iterator for s 阅读全文

posted @ 2009-03-26 19:41 wpcockroach 阅读(198) 评论(0) 推荐(0) 编辑

2009年3月17日 #

位运算的一些技巧集锦

摘要: 1. 判断一个自然数是否是2n形式(n >= 0)bool IsPowerOfTwo(int x){ return ((x & (x - 1)) == 0 ) && (x != 0);} 2. 求两个整数的平均值单纯的(x+y)/2可能存在x+y溢出的风险。int Average(int x, int y){ return (x & y) + ((x ^ y) >> 1);} 3. 计算整数绝对值template <typename T>T Abs(T x){ T y = x >> ((sizeof(T) << 阅读全文

posted @ 2009-03-17 23:47 wpcockroach 阅读(274) 评论(0) 推荐(0) 编辑

字符串的编辑距离

摘要: 字符串的编辑距离也被称为Levenshtein距离(Levenshtein Distance),一般用动态规划来实现。属于经典算法。这里对编辑距离进行简单的分析(经典算法,所以记录一下:-))。我们假定函数dist(str1, str2)表示字串str1转变到字串str2的编辑距离,那么对于下面3种极端情况,我们很容易给出解答(0表示空串)。dist(0, 0) = 0dist(0, s) = strlen(s)dist(s, 0) = strlen(s)对于一般的情况,dist(str1, str2)我们应该如何求解呢?假定我们现在正在求解dist(str1+char1, str2+char 阅读全文

posted @ 2009-03-17 23:07 wpcockroach 阅读(2666) 评论(0) 推荐(1) 编辑

2009年3月14日 #

求Fibonacci数的几种方法

摘要: 先给出Fibonacci的定义:简单地总结了下,至少有5中方法来求Fibonacci(n)。直接带公式简单递归循环改进的递归使用矩阵这里主要介绍下如何用矩阵来求F(n)。直接公式简单递归int Fibonacci(int n){ if (1 >= n) return n; else return Fibonacci(n – 1) + Fibonacci(n – 2);} 循环int Fibonacci(int n){ int fib_n1 = 0, fib_n2 = 1; int fib_n; if (n <= 1) return n; for (int i... 阅读全文

posted @ 2009-03-14 20:37 wpcockroach 阅读(374) 评论(0) 推荐(0) 编辑

Exponentiation 的 O(logn) 算法

摘要: 求幂的O(logn)算法应该已经众所周知了。这里就不做深入地分析,只是简单介绍下并提供两个样板程序。在写下O(logn)算法之前,还是先补充介绍下算法的数学背景。显然,上面的数学式具有递归形式。所以,递归实现可以写成:int Power(int base, unsigned exponent){ if (0 == exponent) return 1; if (1 == exponent) return base; if (exponent & 1) return Power(base * base, exponent >> 1) * base; else... 阅读全文

posted @ 2009-03-14 16:44 wpcockroach 阅读(585) 评论(0) 推荐(0) 编辑