存档

‘Tips & Tricks’ 分类的存档

用模板得到 C++ 数组大小

2010年4月21日 Huang Donghai 没有评论

用宏很容易实现这样的需求

#define ARRAY_SIZE(x) sizeof(x)/sizeof(x[0])

但是宏总是会污染名字空间,不建议用,可以用模板很容易实现这个功能

template<typename T, size_t size>
size_t ArraySize(T (&)[size]) {
	return size;
}
分类: Tips & Tricks 标签: ,

试证明\sqrt{2}为无理数

2010年4月17日 Huang Donghai 没有评论
  1. 假设 \sqrt{2} 是有理数,即有整数ab\frac{a}{b}=\sqrt{2}
  2. \sqrt{2} 写成最简分数 \frac{a}{b},即ab互质,且 \left(\frac{a}{b}\right)^2=2
  3. 所以 \frac{a^2}{b^2} =2a^2=2b^2
  4. 因为 2b^2 必为偶数,故 a^2 亦是偶数
  5. a为偶数(奇数的平方不会是偶数)
  6. 所以必有一整数k,使得a = 2k
  7. 将(3)的式子代入(6):2b^2=\left(2k\right)^2
  8. 化简得 b^2=2k^2
  9. 因为 2k^2 是偶数,所以 b^2 是偶数,b亦是偶数
  10. 所以ab都是偶数,跟\frac{a}{b}是最简分数的假设矛盾
  11. 因为我们发现矛盾,所以(1)的假设错误,\sqrt{2}不是有理数,即是无理数
分类: Tips & Tricks 标签: ,

C/C++/C like 语言 for 语句内变量作用域的问题

2010年4月17日 Huang Donghai 没有评论

按照 ANSI C, C++ 标准,for 语句里定义的变量的作用域应该只在这个 for 语句内:比如:

for (int i=0; i<100; i++) {... }

但是有些编译器不符合这个标准,比如 VC 6,D3D HLSL,如果你要在几个不同的编译器下编译,就有毛病。

对于不符合标准的编译器,其实你可以这么做

#define for if (0) else for

搞定。

Tips and Tricks: 新分类

2010年4月17日 Huang Donghai 没有评论

每天一个小技巧。

第一个:金圣叹说,花生米与豆干同嚼,大有火腿之滋味。

Switch to our mobile site