- 博客(25)
- 资源 (2)
- 收藏
- 关注
原创 指向数组的指针
代码段1:#include int main(void){ enum { m = 3, n = 4 }; int a[m][n]; int (*p)[m][n] = &a; printf("p : %p, *p : %p, **p : %p\n", p, *p, **p); return(0);}代码段2:
2013-04-10 22:11:47
795
原创 一道证明题
证明: 有n个内部结点的AVL树满足 : hAVL树性质: AVL树是一种二叉搜索树,每一个节点的左右子树高度之差最多为1(空树定义为0)。假设高度为h的AVL树内部节点的最小数量为f(h),则 当高度为1时f(1)=1; 当高度为2时f(2)=2; 当高度为3时f(3)=4;
2013-04-08 21:43:30
1035
原创 交叉编译 google protobuf
文章记录了交叉编译google protobuf 的整个过程。build 环境: OS/hardware-platform : Linux ubuntu 3.2.0-32-generic-pae #51-Ubuntu SMP Wed Sep 26 21:54:23 UTC 2012 i686 i686 i386 GNU/Linux CRO
2012-10-21 12:46:33
9671
原创 【K&R 习题 1-23】删除C/C++语言中的程序中的所有注释语句
原题: 编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。再C语言中,注释不允许嵌套。 题目的目的是要做一个简单的语法分析器,所使用的工具为状态机。状态 0 : start 输入 / 进入状态1 输入 " 进入状态4 输入 ' 进入状态8 输入其他字符
2012-09-08 14:45:31
4450
1
翻译 以标记清除的方式垃圾回收
翻译自 : http://www.brpreiss.com/books/opus5/html/page424.html , 用于了解用于垃圾回收的标记清除算法. 标记清除算法是一种垃圾回收算法,它是第一个可以回收被循环引用的数据结构的垃圾回收算法.现在仍旧有许多常用的垃圾回收技术使用各种各样的标记清除算法的变体. 在使用标记清除算法时,未引
2012-09-06 08:09:53
5652
原创 [并行编程] 自己实现一个critical section
#define WIN32_LEAN_AND_MEAN#include #include #include #include #include struct own_critical_section{ long own_lock_count; // count of locked thread, -1 means unlock , other means lock.
2012-06-29 21:37:31
1230
翻译 sharerd_ptr 实践,线程安全性,预定义宏以及FAQ [boost 1 49 0]
Handle/body idiomshared_ptr 一个通常用法是用来实现 handle/body 模式. handle/body模式可以避免在头文件中暴露实现.例子 shared_ptr_example2_test.cpp 包含头文件shared_ptr_example2.hpp .头文件中使用 shared_ptr 保存了了一incomplete type , 从而隐藏了实现
2012-05-05 17:10:24
1614
原创 C/C++宏的替换顺序[整理总结]
关于宏替换的顺序 看过csdn50楼的帖子 : http://topic.youkuaiyun.com/u/20090727/18/457c61bd-7461-431c-bbf9-924865cfe43c.html 之后的 总结 总结: 不管书写的代码是不是跨平台的,当替换路径中出现 operator# 与 operator## 时, 替换的次序可能会不会
2012-04-20 10:52:21
1990
翻译 [boost] shared_ptr 概述
翻译来自 : http://www.boost.org/doc/libs/1_49_0/libs/smart_ptr/shared_ptr.htm3. 概要namespace boost { class bad_weak_ptr: public std::exception; template class weak_ptr; template class shar
2012-03-08 20:44:19
2322
翻译 [boost] shared_ptr 简介
翻译来自 : http://www.boost.org/doc/libs/1_49_0/libs/smart_ptr/shared_ptr.htm1. 简介: Shared_ptr 模板类用来保存动态申请的对象指针,一般在C++中动态申请使用new表达式. 当最后一个指向对象的share_ptr被销毁或者重置时,对象将会被delete掉. 每一个shared_ptr都实现了拷贝构造
2012-02-25 20:19:27
1490
原创 Boost,scoped_ptr中的unspecified_bool_type
从官网上下的boosthttp://sourceforge.net/projects/boost/files/boost/1.48.0/已经在硬盘里扔了半个月了,一直也没时间碰.终于抽出来点空,从scoped_ptr看起来吧.毕竟智能指针相对熟练一点.scoped_ptr应该是属于最简单,安全的非侵入式智能指针了.auto_ptr赋值与拷贝构造会交出指针的控制权,这个行为真是令人头大,不仅不符合常
2012-02-09 21:56:18
1400
原创 C++中的sizeof
昨天看的void的概念中提到了显式转换成为cv void.想起来转换,又没忍住翻到standard conversion.这一大坨隐式转换虽然可以让程序看上去简洁清爽,但是暗地里可是害了我不少次.有一次写从文件读写char类型数据的程序, 当时重载了读取/写入的函数,给出了 unsigned char 以及 int 两种类型的参数,当时写入的数据类型为char,想当然的以为应该是调用unsign
2012-01-07 16:48:58
922
原创 assert , ASSERT中的void
assert C\C++语言提供的断言宏.定义如下: #define assert(_Expression) (void)( (!!(_Expression)) || (_wassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__), 0) )ASSERT
2012-01-05 21:25:13
2636
原创 COM线程模型之二[译]
[原文]http://msdn.microsoft.com/en-us/library/ms809971.aspx<br />Behavior of the COM Threading Models<br />Before any thread can create or manipulate COM objects, it must perform some preliminary initialization to establish its relationship with the COM
2010-08-21 17:57:00
792
原创 COM线程模型之一[译]
http://msdn.microsoft.com/en-us/library/ms809971.aspxObjects and ApartmentsIf you've so much as cracked a book on COM, you've undoubtedly come across the term apartment, which describes the constructs in which COM objects are created. If you're unfam
2010-08-21 17:34:00
556
原创 Copy Construct && Copy assignment(Operator =)
1 让 Copy assginment 返回一个 & *this 为了实现连锁等式 2 让Copy assginment 处理自我复制,这里有两个问题,第一个问题是自我赋值安全性,第二个问题是自我赋值安全性 当拷贝时出现深拷贝时,自我赋值就变的十分危险.可以利用 identity test 来解决这种问题,class T{public: T& o
2010-04-28 13:51:00
1211
原创 COM重点之*COM对象的接口原则
1.对于同一个对象的不同接口指针,查询得到的IUnknown接口必须完全相同.也就是说,每个对象的IUnknown接口指针是唯一的; 2.接口自反性.对一个接口查询其自身总应该成功; 3.接口对称性.由A接口成功查询B接口,则B接口一定也可以成功查询A接口; 4.接口传递性.有A接口成功查询B接口,由B接口成功查询到C接口,则由A一定可以成功查询到C; 5.接口查询
2010-02-18 21:16:00
747
原创 COM重点之*使用引用计数规则
1. 函数参数中使用接口指针变量,分为三种情形:输入参数,输出参数,输入-输出参数. 输入参数,不必管理引用计数. 输出参数. 对于实现者,输出参数在被调用函数返回之前,应该调用addRef使接口引用计数加1; 对于调用者,输出参数在使用完毕输出的接口指针变量之后,应该调用Rlease使接口引用计数减1; 输
2010-02-18 20:53:00
978
原创 编译器比预处理器更有效!
预处理器,他的作用就像名字所说.对于代码按照语法进行预处理.比如常用的 #include. #define,其作用只是简单的替换.当然预处理器不只可以这些事,vc编译器提供了大量的预处理指令,提供包括编译命令行,隐式链接等功能. 看看维基百科对于预处理器的解释吧: In computer science, a preprocessor is a p
2009-08-21 08:32:00
777
转载 视角的力量--再说OO设计原则
转自 :http://www.cnblogs.com/me-sa/archive/2008/04/15/ooview.html 《OO设计原则总结》一文中我提出了一个问题:如何更好的使用这些原则?怎样在实践中遵守这些原则,使用三种视角思考问题就是答案之一; 本文内容包括:1.为什么我们过早的纠缠于细节?问题的本质是什么?2.救命稻草--Martin Fowler的三
2009-05-13 15:45:00
475
转载 设计模式
什么是设计原则? 设计原则是基本的工具,应用这些规则可以使你的代码更加灵活、更容易维护,更容易扩展。基本原则 封装变化Encapsulate what varies.面向接口变成而不是实现 Code to an interface rather than to an implementation.优先使用组合而非继承 Favor Composition Over Inh
2009-05-13 13:46:00
433
转载 关于std::copy 中的overlapped问题解释
转自 http://www.trilithium.com/johan/2006/02/copy-confusion/ The standard C++ library contains std::copy which is the generic equivalent to the Cmemcpy function. There's nothing stopping you fr
2008-12-25 11:00:00
1703
原创 不要把多态应用在数组 [3.2]
你的编译器会在毫无警告的情况下接受这个函数,但是再看一下这段循环代码,这段代码是编译器必须要编译的:for(int i=0;i{s}现在,array[i]实际上是指针运算表达式的缩写:它表示的是 *(array+i).我们知道变量array是指向数组的首地址的一个指针,但是array+i所指向的地址偏离array所指向的地址到底是多少呢?它们的间隔应该是i*size
2008-09-01 17:10:00
575
1
原创 More effective C++ 今日一贴 - 绝不要把多态应用与数组[3]
继承的一大特点就是 , 它允许你通过指向基类的指针和引用来操纵派生类对象.这种指针和引用的行为具有多态性 ------就好像它拥有多种类型.C++ 也允许你通过基类指针和引用来操纵派生类数组.但这算不上什么特性,因为它几乎从来不会按照你期望的那样运行. 例如: BST(二叉搜索数对象) class BST{......}; class BalancedBS
2008-08-28 09:23:00
565
原创 More effective C++ 今日一贴 之自增自减运算符[2]
据说古代(20世纪80年代)的程序员,经常因为 C++ 无法区分 ++运算符 以及 -- 运算符 的前缀和后缀调用而发牢骚,于是C++ 语言得到了扩展,允许对前缀与后缀形式的自增和自减进行重载.重载函数是通过他们参数类型上的差异得以区分,但是不管前缀和后缀形式的自增和自减都没有参数.为了解决语言上的这个问题,c++规定后缀形式有一个int类型参数,当函数被调用时,编译器悄无声息地传递了一个 0
2008-08-27 09:03:00
651
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人