自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Eric Z的程序人生

I'm convinced that the only thing that kept me going was that I loved what I did.

  • 博客(17)
  • 资源 (1)
  • 收藏
  • 关注

原创 金刚坐飞机问题

这个题目出自微软《编程之美》,原题的解法比较繁琐,有些地方也没有解释得很清楚。这里把原书的方法重新描述了一下,并且给出一个更简单易懂的解法。原题描述如下: 有一架航班要起飞,乘客们正准备按机票号码(1, 2, .., N)依次排队登机。突然来了一只大猩猩(名叫金刚),他也有飞机票,但是他插队第一个登上了飞机,然后随意选了一个座位坐下了。根据社会的和谐程度,其他的乘客有两种反应:1....

2018-10-16 17:12:42 467

原创 [Leetcode 4] Median of Two Sorted Arrays

如何求两个数组的中位数,包括长度相同、不相同两种情况。

2016-07-31 22:52:07 643

原创 细数Python与C++的区别(更新中……)

Python与C/C++有不少区别,其中一些很容易疏忽,导致程序出错。这里列了一些,供大家参考。持续更新中……Python没有自增自减运算符(++i、i++、--i、i--)C/C++的一个常见循环是:for (int i = 0; i < 10; ++i) std::cout 而Python对应的循环为:for i in range(10): print (i)也许

2015-08-18 13:19:01 7119

原创 [Leetcode 6] ZigZag问题的一种新思路

为一个简单的字符串转换提供了一种基于图深度优先遍历的方法,是一种新的思路。ZigZag Conversion,原题链接:https://leetcode.com/problems/zigzag-conversion/

2015-08-17 09:17:22 3687

原创 从一个实例来认识GDB与高效调试

GDB的全称是GNU project debugger,是类Unix系统上一个十分强大的调试器。这里通过一个简单的例子(插入算法)来介绍如何使用gdb进行调试,特别是如何通过中断来高效地找出死循环;我们还可以看到,在修正了程序错误并重新编译后,我们仍然可以通过原先的GDB session进行调试(而不需要重开一个GDB),这避免了一些重复的设置工作;同时,在某些受限环境中(比如某些实时或嵌入式系统

2014-11-24 21:31:49 13520 5

原创 编译器优化导致硬件寄存器写入失败的一个例子

最近在调试导致一块网卡不能发包的驱动,最后追踪到这样一段代码:// Memory-mapped bufferstruct Registers{ unsigned long dwDeviceCtrl; ..};.. #define DEVICE_RESET (1 << 26)// m_pReg是一段memory-mapped I/O的起

2013-12-18 14:06:19 2807

原创 Incomplete type与Foreward declaration

有时我们在编程时会遇到一些与类型不完整有关的编译器报错,此时我们往往只是简单的把它改成相应的完整类型定义,也没空去想为什么会报错,还有没有其他更好的解决方法;还有,很多人会一上来不管三七二十一把所有可以包含的头文件都包含一遍,确保编译通过。而很多时候,使用一个自定义类型,是不需要包含它的头文件的。所以,今天写篇文章来对这些做个总结。Incomplete Type不完整类型,包括那些类型

2012-11-01 16:19:43 3918 3

原创 static关键字对对象存储期和链接期的影响

在看这篇文章之前,先问自己一个问题:加上static关键字后的名字可能拥有外部链接期吗?如果你已经很确定地知道答案,并且和这篇文章的最后结论相同,那么恭喜你,不用看这篇文章了,因为我将要讲的你都知道了。影响对象的存储期存储期,又称storage duration,是指变量所占用内存空间的生命期。也就是说,它决定了在整个程序的执行过程中该空间必须存在的时间段。它大于等于对象的生命期。C++0

2012-10-31 15:18:45 1614 5

原创 inline函数必须在头文件中定义吗?

前不久在写代码的时候遇到一个link错误,代码的原型如下所示,基本就是定义了一个基类和派生类,在派生类的一个成员函数中用到了基类定义的一个内联函数。// base.hclass Base{protected: void fun();};// base.cpp#include "base.h"inline void Base::fun(){}// derive

2011-12-23 13:09:26 16241 3

原创 在switch-case中定义变量时当心被“穿越”

这篇文章的分类是C++,所以特此声明这里提到的规则只适用于C++。对于C语言,是有不同的一套规则的。先来看看下面这段代码,有问题吗?void RunStateMachine(){ switch(m_status) { case TASK_START: int data = FormDataToSend(); m_mail

2011-12-16 01:00:12 12411 19

原创 缩进与对齐——正确地使用Tab和空格

写代码时大家都会使用缩进(indentation)和对齐(alignment),这是两个相关而又不同的概念,两者都是为了提高代码的可读性。缩进出现在一行的最左边,目的是明显地区分开包含与被包含的代码;对齐则是为了使代码美观、整洁。下例中,类的两个成员变量相对于类名来说具有一级缩进;两个变量的注释部分采用了对齐显示。它使用了Tab(假设一个Tab等于8个空格的大小)来缩进和对齐,一块绿色表示一个

2011-12-11 20:00:17 38949 7

原创 揭开私有继承的面纱

什么是私有继承?以前在学校学习的时候,冥冥乎知道有这样一个东西,却没有仔细研究过。后来工作中用到Boost库才开始了解它。如果说保护继承大多是为了语言完整性的话,私有继承还是有一些用途的。私有继承 vs 公有继承公有继承继承的是接口与实现,它表示了类与类之间is-a的关系。而私有继承继承的仅仅是实现,它表示了has-a (或者 is-implemented-in-terms-of)

2011-12-05 00:54:00 5600 18

原创 避免在派生类中重新定义基类的非虚函数

我们都知道,在基类中定义虚函数的目的是允许派生类拥有相同接口却可以有不同的实现,通过对象的指针或引用来访问虚函数可以实现运行时的多态。这么说来,在派生类中重定义(override)虚函数是没有任何问题的。那么,可以重定义基类中的非虚函数吗?答案是:技术上你可以这样做(至少编译器不会报错),但是绝大多数情况下不应该做。class Base{public: void f() {

2011-12-01 21:02:58 4754

原创 C++名字隐藏对公有继承的影响

在讨论名字隐藏对公有继承的影响前,让我们先来看看什么是名字隐藏,以及它在非继承结构中的影响。C++中的名字隐藏(Name Hiding)规则简单地理解就是:当一个具有小作用域(inner scope)的对象A和一个作用域包含A(outer scope)的对象B同名时,在A的作用域中,B将不可见。也就是说B完全被A所屏蔽。double i = 3.1415;namespace XY{

2011-11-18 14:13:54 3246 5

原创 纯虚函数的默认实现

在帮新同事进行代码审查的时候,常常会发现这样的问题:代码中原有基类B和派生类D1,现在新加一个派生类D2,它有一个函数f2()。由于经验不足,新同事并没有注意到D1也有类似的函数f1()。于是造成了类似的代码出现在了两个地方,代码冗余造成将来的维护工作异常困难。注意到f()实际上是一个通用的行为,我们可以把它抽出来放到基类中,如下所示。class B{public: virtual

2011-11-16 22:40:36 11926 8

原创 从信息隐藏的一个需求看C++接口与实现的分离

让我们从stackoverflow上一个同学的问题来开始。问题的原型是这样的(原问题见:class member privacy and headers in C++):Portaljacker:“有一个类A, 有一些共有成员函数和私有数据,如下所示。”class A{public: X getX(); Y getY(); Z getZ(); ..private

2011-11-02 00:07:21 6440 9

原创 开始写博客了

很久之前就注册了CSDN的博客,但是因为工作原因再加上自己比较懒,一直没有开始动手写。才体会到技术是需要不断交流的,否则就会生锈。写写于人于己都是有益的。开始写吧!

2011-11-01 22:51:41 626

Designing and Building Portable Systems in C++

Designing and Building Portable Systems in C++

2010-12-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除