1、“增加间接层来增强抽象性以及统一性”
Iterator就是这样的一个东东。它对指针的泛型封装,或者说对位于range中的对象数据的泛型封装,使得不同数据类型有了参数化的一致,也使得单个对象本身和对象的前后对象有了“相同”的联系,从而统一了所有不同的数据类型和外界的统一接口。
这个思想也可应用于很多的领域,切记。
2、 概念与实体
概念Concepts与实体Model的关系就好像class与object.。前者是定义好了的一组接口或条件。后者是满足此条件和接口的实例。前者是虚,后者为实。就好比“牛”与“我家的那头老黄牛”。
这时我突然想到一个经常会提,但其实我从未深想的问题:
Q:先是有概念,还是先有实体?
A1:几乎是直觉:当然是先有实体了。正是因为有了一大堆的实体,再归纳抽象这些实体的共性,从而形成概念。《泛型编程与STL》也告诉我们:研究一个概念,先看实际算法,看看算法需要一个满足怎样条件的Model,比如find算法,只需要可“读”型Iterator,因此才有了Input Iterator概念。
A2:不对。应该是概念,或者说理念先于实体。我家的那头黄牛还没有出生,就已经有了牛的概念。你或许会说那头黄牛之前还有其他牛。但是,所有的面包都是在面包模具制作好了之后开始制作的。如果你是一个唯物主义者,在宇宙产生之初,一定已经有了一系列条件,这些条件先于任何物质。如果你信上帝,是上帝根据自己的样子创造了人类,这也说明“人”的概念先于任何个人。
3、 层次、树与有向无环图
突然发现自己对这几个看起来如此简单的概念都理解的都不准确。只要是有方向的关系,就称他为有层次的,有层次的不就是树型吗?如C++中的类的继承可以叫层次体系吗?
其实类的继承形成的体系准确点应该说是有向无环图。而不是层次体系,更不是树型。
树的定义是只有一个输入,有0或多个输出。层次的概念应该是根沿着有向边走到一个点的所有路径长度应该相等。而有向无环图的概念不言自明,是不含环路的有向图。树一定是层次结构,且是有向无环图,层次结构也一定是有向无环图,反之则不成立。请看下面这两个图。左图是层次结构,右图是有向无环图。


由此可见,我们日常默认到视而不见的概念,其实都不是很清楚的。不信,我问你,
函数的概念你清楚吗?
缓冲与cache有区别吗?hash与map呢?
虚心到底为何意?中庸?
好人?你觉得自己是一个好人吗?
我们为什么要排队买东西?
你的优势是什么?劣势呢?
你到底想想什么?理想=目标?
……
别急,我正在整理出从最常见的词语,到各种现象;从各种知识到我们的专业知识的各个概念。去用自己辩证的思维独立的思考。到时候,你也会和我一样对此深信不疑的。
4. 越过尾端指针(如A+N,其中A为长度为N的数组)在C语言中是被允许是,只是这个指针不能取值。所以[ first,last )中的last才会有效。其实C语言中有三种不同的指针:
a) 普通有效指针,如&A[0],可对它做dereference动作。
b) 非法指针如NULL
c) 越过尾端指针指针,不可进行dereference动作。(P12)
5. 在本书中,学到的最重要的技巧是:Tterator Traits和Types(相关型别)(p33)
(未完待续)





