页面载入中...

Archive for the ‘C/C++’ Category

Visual Studio 用 debug 启动调试挂起,提示 Visual Studio Is Busy

最近遇到了很多件周围人从来没遇到过的事,很是费解。
其中一件就是我的 Visual Studio 以 debug 方式启动调试某个工程,经常会挂起,output 显示正在加载某个 dll 导出的符号,然后就不动了,系统托盘有时会同步提示“Visual Studio is busy”,概率达到 90% 以上,经过再三验证,确实是我的 Visual Studio 出问题了,一开始以为是我之前改过 include/lib/bin 的默认路径,编译依赖和运行依赖与别人不同所致,事实证明不是这个原因。
刚才同样的情况再次发生,终于找到了有价值的线索:

阅读全文 – 638 字 »

float 转换 DWORD 的陷阱

本以为是个很简单的东西,但其中隐藏了一个很大的陷阱:不能使用强制转换。亲手试试下面的几行代码就知道为什么了:

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

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