页面载入中...

Archive for the ‘C/C++’ Category

Google 在 Twitter 上的二进制问候是什么

第一眼看到 Google 在 Twitter 上用二进制向人们打招呼的时候,就感觉应该说的是一句话,只是没时间去搞清楚是什么。正好最近实在无聊地厉害,为了避免生命进一步浪费在如此阳光明媚狗熊撒欢的季节,就写了几行代码看看 Google 到底说了什么。

#include <stdio.h>
阅读全文 - 827 字 »

DirectX Software Development Kit (November 2008) 下载

ORIGIN
http://www.microsoft.com/downloads/details.aspx?FamilyId=5493F76A-6D37-478D-BA17-28B1CCA4865A&displaylang=en
下载地址(直接用迅雷)
DXSDK_Nov08.exe
阅读全文 - 17749 字 »

[算法] 动态规划:最长公共子串 LCS

我的算法学得好差,尤其是动态规划这一块,在这里吃了不少亏。
这次写的跟面试题有关。老早就知道最长公共子串(Longest Common Substring)这个问题,但从没认真搞过,这些天又过着伪充实的繁忙生活,直到今天才终于有点时间和心情(很重要)学习学习了。
原理啥的我还是不讲了,听我讲不如点击上面的链接自行阅读维基。下面我还是贴贴代码吧,写这点东西还是花了点时间的。
For the example strings "ABAB" and "BABA":
阅读全文 - 2890 字 »

[C/C++] 为什么把常量写在 == 运算符的左边

当然,把常量写在 == 运算符的左或右对运算本身没有任何影响,它们仅仅是两种不同的书写风格。所以我敢保证很多人并不会因为看到某些帖子宣称“应该将常量放在左边”就真的改变自己固有的风格,说到底,习惯而已。
不过,将常量写在运算符左边在某种情况下可能会更容易查错。看下面的例子:
片段一,当且仅当 flag == 5 时执行循环体中的内容:

阅读全文 - 440 字 »

[算法] 回溯法:八皇后问题

继续引用维基的图来说明(八皇后问题中的)回溯:

下面还是贴代码,程序会对树进行遍历(共 2057 个节点),从中找出所有可能的解(不同解共 92 个,非唯一解)。

阅读全文 - 569 字 »

[算法] 分治策略:快速排序

先引用维基上的一个图,它很形象地展示了快速排序的整个过程:

快速排序的原理可参考上面的链接或任意一本算法教材,让我来讲也讲不清楚,我也是花好久才彻底看明白(基础太差了,汗),所以就贴贴代码好了,有人会说了,快排的代码网上多得很,还要你来贴干嘛。因为这些代码是我看着《算法基础》这本书上的原理和图自己琢磨出来的(完工后发现跟别人的代码惊人地雷同,汗汗汗),只有递归的终止条件那里参考了一下现成的代码,留下来当作笔记吧。

阅读全文 - 666 字 »

我的答案:浙大ACM#1350(The Drunk Jailer)

题目地址

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 字 »

Google C++ 编程风格指南(1):头文件(2)

Google C++ 编程风格指南(1):头文件(2)

-inl.h 文件
函数的参数顺序
阅读全文 - 1391 字 »

Google C++ 编程风格指南(1):头文件(1)

Google C++ 编程风格指南(1):头文件(1)

#define 保护
头文件依赖
阅读全文 - 1502 字 »

Google C++ 编程风格指南(0):背景

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 字 »

Protocol Buffers 性能测试

昨天大致介绍了下 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 字 »

第一个 Protocol Buffers 小程序:电话本

晚上刚写了一篇《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 字 »

C++虚函数详解

这篇文章基本上可以回答你对 C++ “虚函数”的所有问题,翻译很浪费时间,能读懂英文的直接看原文吧,如果确实有必要再翻译。
C++ FAQ Lite - Inheritance -- virtual functions
------ 分割一下 ------
如果你对 C++ 的私有继承和保护继承有任何问题,可以阅读我翻译的文章——C++ 私有继承和保护继承。

C++私有继承和保护继承

声明:如需转载请使用超级链接注明本文地址(http://hellobmw.com/archives/cplusplus-private-and-protected-inheritance.html)及英文原文地址(http://www.parashift.com/c++-faq-lite/private-inheritance.html)。
本文目录

如何表达“私有继承”
阅读全文 - 1618 字 »

使用Event同步线程的小例子

在多线程编程中,有时候我们需要一个函数调用不是立即返回,而是在等待某个线程结束后再返回。要达到这个目的有很多种方法,这篇日志我只说一下使用 Event 的方法。
看一个小例子,在 main 函数中创建一个线程计算 1, 2, 3, ..., 100 的和并打印结果——由于这个计算的执行时间实在太短,所以让线程休眠 2 秒钟虚拟一个更加耗时的计算过程——等待线程结束后 main 函数返回。
源代码如下:

阅读全文 - 336 字 »

我的答案:北大ACM#1007(DNA Sorting)

好久没做 ACM 了,昨晚又跑到北大的上面做了一题(没敢去浙大的,ZOJ 的判定比北大严格得多),题目就不抄了,自己去看吧, 1007 - DNA Sorting。
下面我把自己的答案贴出来,说实话我这个代码非常烂,虽然 Accepted,但占用内存 300K,耗时 375 MS,代码长度 2261B,跟排在前面的高手的解决方法完全不能比——第 1 名:占用内存 4K,耗时 0 MS,代码长度 847B……第 20 名,占用内存 12K,耗时 0 MS,代码长度 554B——可能是我写的代码太过于 C++ 了,不仅有类,还用了模板,相当依赖 STL。如果有高手看到我这个帖子,希望能多多指教。

阅读全文 - 1521 字 »

免费电子书推荐:Effective STL 中文版

前段时间从亚马逊买了 Scott Meyers 的 Effective C++ 和 More Effective C++,今天又在 STL 中文站看到了电子版的 Effective STL 中文版,乐哉乐哉!想成为 C++ 高手的同学一定不要放过这几本经典书!
Effective STL 封面

免费电子书推荐:C++ 编码规范与指导

偶然间发现了白杨的网站,然后发现了这本电子书《C++ 编码规范与指导》,虽然其中一些内容可能过于绝对,但还是强烈推荐给 C++ 开发者读一下。

目录
版权声明
阅读全文 - 356 字 »

Windows/Unix 信号量(Semaphore)示例程序

至于什么是信号量(Semaphore),网上相关资料多得很,一搜一大把,我就不做重复劳动了。只是把关于使用信号量的示例程序贴一下当作笔记,万一能对大家有点点帮助那就更好了。Windows 平台的代码来源于 MSDN,Unix 平台的代码是 Google 来的。
Part 1 - Windows 平台信号量(Semaphore)示例程序

阅读全文 - 5846 字 »

Effective C++ 学习笔记(一):不滥用 #define 宏

从图书馆借到 Scott Meyers 先生著、侯捷先生译的《Effective C++ 中文版(第二版)》后就爱不释手了,大有相见恨晚的感觉。——这样的好书还是应该自己买一本作为居家旅行必备,最新的是第三版,相比第二版改动较大,如果钱包允许,建议每版各买一本,我不是开玩笑滴。XD
想来 blog 长草多日也该清理清理了,顺便把自己学习的一点点体会发上来充数。高手见笑了。
------ 从这里分割 ------
这篇笔记的主要内容来源于《Effective C++ 中文版》第三版的条款 02:尽量以 const, enum, inline 替换 #define。用作者的话来解释,这个条款的意思就是“宁可以编译器替换预处理器”,因为“#define 不被视为语言的一部分”。
阅读全文 - 1009 字 »