April 9, 2009
Google 在 Twitter 上的二进制问候是什么
第一眼看到 Google 在 Twitter 上用二进制向人们打招呼的时候,就感觉应该说的是一句话,只是没时间去搞清楚是什么。正好最近实在无聊地厉害,为了避免生命进一步浪费在如此阳光明媚狗熊撒欢的季节,就写了几行代码看看 Google 到底说了什么。
#include <stdio.h>
阅读全文 - 827 字 »
April 9, 2009
第一眼看到 Google 在 Twitter 上用二进制向人们打招呼的时候,就感觉应该说的是一句话,只是没时间去搞清楚是什么。正好最近实在无聊地厉害,为了避免生命进一步浪费在如此阳光明媚狗熊撒欢的季节,就写了几行代码看看 Google 到底说了什么。
#include <stdio.h>
阅读全文 - 827 字 »
November 14, 2008
ORIGIN
http://www.microsoft.com/downloads/details.aspx?FamilyId=5493F76A-6D37-478D-BA17-28B1CCA4865A&displaylang=en
下载地址(直接用迅雷)
DXSDK_Nov08.exe
阅读全文 - 17749 字 »
October 28, 2008
我的算法学得好差,尤其是动态规划这一块,在这里吃了不少亏。
这次写的跟面试题有关。老早就知道最长公共子串(Longest Common Substring)这个问题,但从没认真搞过,这些天又过着伪充实的繁忙生活,直到今天才终于有点时间和心情(很重要)学习学习了。
原理啥的我还是不讲了,听我讲不如点击上面的链接自行阅读维基。下面我还是贴贴代码吧,写这点东西还是花了点时间的。
For the example strings "ABAB" and "BABA":
阅读全文 - 2890 字 »
August 20, 2008
当然,把常量写在 == 运算符的左或右对运算本身没有任何影响,它们仅仅是两种不同的书写风格。所以我敢保证很多人并不会因为看到某些帖子宣称“应该将常量放在左边”就真的改变自己固有的风格,说到底,习惯而已。
不过,将常量写在运算符左边在某种情况下可能会更容易查错。看下面的例子:
片段一,当且仅当 flag == 5 时执行循环体中的内容:
August 9, 2008
August 7, 2008
先引用维基上的一个图,它很形象地展示了快速排序的整个过程:
快速排序的原理可参考上面的链接或任意一本算法教材,让我来讲也讲不清楚,我也是花好久才彻底看明白(基础太差了,汗),所以就贴贴代码好了,有人会说了,快排的代码网上多得很,还要你来贴干嘛。因为这些代码是我看着《算法基础》这本书上的原理和图自己琢磨出来的(完工后发现跟别人的代码惊人地雷同,汗汗汗),只有递归的终止条件那里参考了一下现成的代码,留下来当作笔记吧。
July 24, 2008
题目地址
A certain prison contains a long hall of n cells, each right next to each other. Each cell has a prisoner in it, and each cell is locked.
One night, the jailer gets bored and decides to play a game. For round 1 of the game, he takes a drink of whiskey, and then runs down the hall unlocking each cell. For round 2, he takes a drink of whiskey, and then runs down the hall locking every other cell (cells 2, 4, 6, …). For round 3, he takes a drink of whiskey, and then runs down the hall. He visits every third cell (cells 3, 6, 9, …). If the cell is locked, he unlocks it; if it is unlocked, he locks it. He repeats this for n rounds, takes a final drink, and passes out.
阅读全文 - 2250 字 »
July 11, 2008
Google C++ 编程风格指南(1):头文件(2)
-inl.h 文件
函数的参数顺序
阅读全文 - 1391 字 »
July 11, 2008
Google C++ 编程风格指南(1):头文件(1)
#define 保护
头文件依赖
阅读全文 - 1502 字 »
July 10, 2008
Google C++ 编程风格指南(0):背景
C++ is the main development language used by many of Google's open-source projects. As every C++ programmer knows, the language has many powerful features, but this power brings with it complexity, which in turn can make code more bug-prone and harder to read and maintain.
C++ 是 Google 很多开源项目使用的主要开发语言。如每个 C++ 程序员知道的,这门语言拥有很多强大的特性,但强大也使之复杂,造成的负面影响是代码更易产生 bug、更难读和维护。
The goal of this guide is to manage this complexity by describing in detail the dos and don'ts of writing C++ code. These rules exist to keep the code base manageable while still allowing coders to use C++ language features productively.
阅读全文 - 2316 字 »
July 9, 2008
昨天大致介绍了下 Protocol Buffers,由于时间关系没能做性能测试,今天上午补上,给 Protocol Buffers 做一个性能测试。
声明:转载请务必以超级链接的形式注明本文地址(http://hellobmw.com/archives/protocol-buffers-performance.html)。
细节就不讲了,测试程序是在电话本基础上改的,往一个 AddressBook 中插入 100000 条 Person 联系人记录,每个联系人有 1 个整型的 ID,1 个 std::string 型名称,还有 10 个 std::string 型电话号码。分别使用 debug 版本、release 版本、Protocol Buffers 速度优化模式(参见 Getting More Speed 部分)的 release 版本进行测试,每次测试前将之前生成的 addressbook 文件删除。
阅读全文 - 709 字 »
July 8, 2008
晚上刚写了一篇《Protocol Buffers 简介》,然后就开始动手实战试用一下 Protocol Buffers 这个 Google 出品的东东。
首先从 Protocol Buffers 的主页上把源码下回来,注意是源码,那个 Win32 包不必下,它里面只有一个编译好的 protoc.exe,没有开发所必须的库,光有那个 Protocol Buffers 编译器是没用。
将源码解压出来以后,直接到 vsprojects 目录下用 Visual Studio 2005(其它版本我没有试)打开解决方案文件 protobuf.sln 开始编译。编译成功结束后会在解决方案目录下生成一个 google 目录,里面是单元测试的程序;另外就是 Debug 目录和 Release 目录了,生成的对应版本的 .lib 和 .dll 还有 protoc.exe 编译器全在里面。
那么,头文件呢?在解决方案目录下有一个 extract_includes.bat 文件看到了吗,执行后会生成一个 include 目录,里面就是使用 Protocol Buffers 开发必须的所有头文件了。
阅读全文 - 2102 字 »
July 7, 2008
这篇文章基本上可以回答你对 C++ “虚函数”的所有问题,翻译很浪费时间,能读懂英文的直接看原文吧,如果确实有必要再翻译。
C++ FAQ Lite - Inheritance -- virtual functions
------ 分割一下 ------
如果你对 C++ 的私有继承和保护继承有任何问题,可以阅读我翻译的文章——C++ 私有继承和保护继承。
July 4, 2008
声明:如需转载请使用超级链接注明本文地址(http://hellobmw.com/archives/cplusplus-private-and-protected-inheritance.html)及英文原文地址(http://www.parashift.com/c++-faq-lite/private-inheritance.html)。
本文目录
如何表达“私有继承”
阅读全文 - 1618 字 »
June 7, 2008
在多线程编程中,有时候我们需要一个函数调用不是立即返回,而是在等待某个线程结束后再返回。要达到这个目的有很多种方法,这篇日志我只说一下使用 Event 的方法。
看一个小例子,在 main 函数中创建一个线程计算 1, 2, 3, ..., 100 的和并打印结果——由于这个计算的执行时间实在太短,所以让线程休眠 2 秒钟虚拟一个更加耗时的计算过程——等待线程结束后 main 函数返回。
源代码如下:
April 14, 2008
好久没做 ACM 了,昨晚又跑到北大的上面做了一题(没敢去浙大的,ZOJ 的判定比北大严格得多),题目就不抄了,自己去看吧, 1007 - DNA Sorting。
下面我把自己的答案贴出来,说实话我这个代码非常烂,虽然 Accepted,但占用内存 300K,耗时 375 MS,代码长度 2261B,跟排在前面的高手的解决方法完全不能比——第 1 名:占用内存 4K,耗时 0 MS,代码长度 847B……第 20 名,占用内存 12K,耗时 0 MS,代码长度 554B——可能是我写的代码太过于 C++ 了,不仅有类,还用了模板,相当依赖 STL。如果有高手看到我这个帖子,希望能多多指教。
March 21, 2008
前段时间从亚马逊买了 Scott Meyers 的 Effective C++ 和 More Effective C++,今天又在 STL 中文站看到了电子版的 Effective STL 中文版,乐哉乐哉!想成为 C++ 高手的同学一定不要放过这几本经典书!
Effective STL 封面
March 20, 2008
偶然间发现了白杨的网站,然后发现了这本电子书《C++ 编码规范与指导》,虽然其中一些内容可能过于绝对,但还是强烈推荐给 C++ 开发者读一下。
目录
版权声明
阅读全文 - 356 字 »
March 12, 2008
至于什么是信号量(Semaphore),网上相关资料多得很,一搜一大把,我就不做重复劳动了。只是把关于使用信号量的示例程序贴一下当作笔记,万一能对大家有点点帮助那就更好了。Windows 平台的代码来源于 MSDN,Unix 平台的代码是 Google 来的。
Part 1 - Windows 平台信号量(Semaphore)示例程序
March 4, 2008
从图书馆借到 Scott Meyers 先生著、侯捷先生译的《Effective C++ 中文版(第二版)》后就爱不释手了,大有相见恨晚的感觉。——这样的好书还是应该自己买一本作为居家旅行必备,最新的是第三版,相比第二版改动较大,如果钱包允许,建议每版各买一本,我不是开玩笑滴。XD
想来 blog 长草多日也该清理清理了,顺便把自己学习的一点点体会发上来充数。高手见笑了。
------ 从这里分割 ------
这篇笔记的主要内容来源于《Effective C++ 中文版》第三版的条款 02:尽量以 const, enum, inline 替换 #define。用作者的话来解释,这个条款的意思就是“宁可以编译器替换预处理器”,因为“#define 不被视为语言的一部分”。
阅读全文 - 1009 字 »