随笔 - 6  文章 - 8  trackbacks - 0
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(1)

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

很久没有来过了,都忘了自己曾经雄心勃勃的在这儿开了个博客~ 虽然天天在用C++,却越发觉得自己的浅薄了;呵呵,年纪一大把了,也不知何时才能静下心来真正的做点事情。

推荐两个相关的RSS吧
http://www.ddj.com/rss/cpp.xml
http://www.ddj.com/rss/architect.xml

自己也要多看看,才能不断的进步啊~

posted @ 2009-05-25 17:17 Neal 阅读(200) | 评论 (0)编辑 收藏
刚刚装上VC8,发现VC8现在也支持hash_map了,终于可以不用STLPort了(不是不想用,而是在VC里面用太TNND麻烦了)。不过VC8上的hash-map还是有不爽的地方 1。它定义在stdext namespace 中 2。它需要至少specialize两个template来添加自定义类。。。不过终究还是算不小的的进步啦;D =====================================


============ VC2005 ================
// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include
#include
#include

struct Key{
  int i;
};


namespace std {
  template <> struct less<::Key>
   : public binary_function<::Key, ::Key, bool>
  {
    bool operator()(const ::Key& _Left, const ::Key& _Right) const
    { // apply operator< to operands
      return (_Left.i < _Right.i);
    }
  };
}

namespace stdext {
  template <> size_t hash_value(const Key &key){
    return hash_value(key.i);
  }
}

int _tmain(int argc, _TCHAR* argv[])
{
  stdext::hash_map testmap; 
  Key k;
  k.i = 1;
  testmap[k] = std::string("hello, world");
  testmap[k] = std::string("hello, again");

  std::cout << "size of map: " << testmap.size() << std::endl;
  return 0;
}

============GCC + STLPort ===========
struct Key {
  ...
};


namespace std {
  template <> struct hash {
    size_t operator()(const Key &key) const {
        ...
    };
  }
}


int main()
{
  ...
}

posted @ 2007-04-03 14:01 Neal 阅读(1977) | 评论 (1)编辑 收藏
呵呵,欢迎大家访问偶的网站哈
http://travian.infinites.net

做的很丑陋,不过偶不善于HTML嘛
嘿嘿
posted @ 2007-03-28 16:43 Neal 阅读(293) | 评论 (1)编辑 收藏

一种语言代表了一种思维,而思维决定了问题的解决方式。

 

从程序设计语言出现到现在已经经历了四代。大多数高级语言都对应到第三代或四代程序设计语言。按其主要支持的编程模型(思维模式)分类,大致可以分为如下类型

1 过程型:这类语言把应用抽象为序列化的操作步骤,其典型代表如PASCALC等。

2 函数型:这类语言把应用抽象为函数(按定义,函数是从一个域到另一个域的映射);它们试图把问题分解为集合和集合间的函数关系。典型代表是LISP

3 逻辑型:这类语言把问题抽象为事实与规则的结合,试图通过逻辑演算解决实际问题。典型代表是PROLOG

4 面向对象型:这类语言从上世纪80年代后迅速发展,这类语言试图将实际问题抽象为独立的对象以及对象间的交互,典型代表是早期的SmallTalkEiffel

5 面向数据结构型:这类语言将问题抽象为对结构化数据的操作,例如现在常用的SQL

 

作为一个诞生与上世纪80年代初期的编程语言,C++被广泛的认为是一种支持面向对象的语言;但是,我认为C++的伟大之处却更多的在于(除了所提供完备的面向对象支持)它同样提供了C的面向过程的编程模型以及只有少数高级语言能支持的范型编程(我更喜欢叫它面向算法的编程)。在实际的应用过程中,我们往往需要不同层次的抽象,C++所支持的广泛的编程模型为我们提供了强大和灵活的工具,使得我们在设计和实现时能自如的选择不同的模型,以最合理的(组合)方式解决问题。

 

不可否认,在当今的程序设计中,面向对象已经基本上是一统江湖,但它往往并不是最合理的选择;例如在针对协议栈的开发中,使用面向过程的模型往往优于使用面向对象的模型(或许这也是为什么主流的电信设备供应商坚持使用C的原因?);而在针对算法进行抽象时,使用面向对象的思维模式几乎完全是不可行的(算法和对象间的不同之处是显而易见的);如果机械的运用面向对象思维,只能使最终产品的质量、可维护性、可读性下降。

 

或许有人会问,那么应该如何选择抽象方式呢?我觉得这个应该是因人和问题的不同而不同的,关键是在使用C++的过程中,多从这些方面进行思考、总结,以体会采用不同模式解决问题的优缺点,努力使用最合理的方式(或组合)对问题进行抽象并加以解决。我也常常为这些种种选择而迷惑,因此在这儿也希望那些已经到了“不惑”层次的哥们多多指教。

 

当然,从另一方面来说,越多的选择往往意味着越难的选择,这或许也是为什么现在这么多人趋骛与更单纯、更简单的JAVAC#的原因吧;但是当我们真正理解并掌握C++提供的这些编程模型时,我想我们会更加坚定当初选择C++的信念;D

 

时间仓促,不正之处敬请指教。

posted @ 2007-03-28 14:29 Neal 阅读(1146) | 评论 (1)编辑 收藏

C++中,经常用到对象(Object)、类(Class)和实例(Instance)等概念,一直对这几个概念有些混淆,今天算是整理一下自己的思路,谈谈自己对这几个概念的看法吧;希望不当之处大家能够指出,也欢迎大家看看自己的看法。

从其定义来看,对象是指一个能完成特定操作,具有特定属性的实体(Component);类是具有相同属性对象的集合(Group of Objects)。实例则往往被理解为一个对象的具体化。

对象更多的是一个概念,在象SmallTalk这类纯粹的OO语言中,所有东西都是对象(MetaClass, Class, Instances);而类在不过是一个特殊的、能作为模板创建实例的对象。(一直想弄个SmallTalk来玩玩,但终究没有时间和精力去学习。)

C++中,“对象”概念往往被模糊化,它不是一个能包括一切的概念,而在某些环境下成为能和类与实例相互替换的概念。

原因之一,或许是在C++对类的定义。C++把类定义为一个抽象数据类型(ADT)。而ADT只是一个实现上的概念,它在运行时并不存在一个对象所应该具有的特征(属性和行为)。虽然C++中引入了运行时类型信息(RTTI,参看type_info类),但仍然很难把类当成一个对象。从这个角度来说,在实现时类可以看作是对象概念的代名词。

原因之二,个人觉得应该是和使用这些概念的上下文有关。在使用C++时(包括设计模式),往往需要考虑两个层次的抽象:
1. 编码(实现)时的抽象
2. 运行时的抽象

在实现时,C++中,无疑类的概念和对象的概念是一致的,而实例则可以理解为一个类的实例化或一个对象的具体化;对应与Design Pattern,那些结构化的模式(Structural Patterns)更适合与这一层次的抽象。

在运行时,个人觉得对象更多的是和实例等同的。我们说某个对象和另外一个对象交互更多的是在表达某个类的一个实例和另一个类的一个实例进行交互,这个时候,对象不再是一个概念,而是被具体化了。而设计模式中的行为模式(Behavioral Patterns)则更适合与这个层次的抽象。

以上是我对这几个基本概念的理解,请大家批评指教!
//bow

posted @ 2007-03-22 10:34 Neal 阅读(6006) | 评论 (5)编辑 收藏

"C++ is a Culture"

这是我的第一篇文章,就用标准的C++思维开始吧。

"Hello, World"是我写的第一个程序,它也是我第一篇文章的标题。以前很少写东西,原因之一是发现自己总是无法表达自己。最近越来越发现能表达自己的重要性了,万事开头难,何不就从C++开始呢?就象十年前刚刚接触C++时从一个"Hello, World"开始一样。

C++的迷人之处在于它能让我自由的表达自己的思想,能自由的控制自己的一切……它对我,或者对广大C++爱好者而言,已经不仅仅是编程语言了,它是一种文化!文化是会发展的,所以我不会感到厌倦;文化是博大的,所以我感到自己的渺小;文化是包容的,所以我才希望自己能为它做出自己的贡献,哪怕是一点点,自己也满足了。

今后我会慢慢写出一些我的心得,对C++,对Design Patterns以及一切我对这个文化的感悟……希望大家能喜欢,也希望大家和我一样对C++充满敬畏之情。

向Bjarne Stroustrup致敬!

posted @ 2007-03-20 16:02 Neal 阅读(231) | 评论 (0)编辑 收藏
仅列出标题