Relation是一个复杂容器。简单来说,它是一个数据表(DataTable)。它类似于数据库(Database)中的表,当然,是一个简化的表:简化在于没有复杂的SQL语句,只是支持基于关键字(索引)的select。应用场景:如果你的数据有多列,并且需要相互查找(多对多关系),那么Relation容器非常适合。著名的GLib(GNOME Library)有一个GRelation,和stdext Relation的功能类似。但stdext Relation的功能更加强大。这表现在: * stdext的Relation是真正的数据表(DataTable),可以创建任意多列的数据,而不只是2列。创建2列的表,可以使用stl的std::pair(当然也可以用boost::tuple)。创建超过2列的表,使用boost::tuple。 * 可以为任意列创建索引,并且各列独立指定使用map(红黑树)还是hash map(哈希表)作为索引表是可能的。阅读全文>
发表于 @ 2008年07月23日 01:53:00|评论(loading...)|收藏
这里,JSPT 是我发明的名词。它代表了 Json PHP Transformations = Json (Data) + PHP (Transformation Template)。为什么有这个词,是因为这个世界上还有一个著名的词:XSLT = XSL Transformations = XML (Data) + XSL (Transformation Template)。阅读全文>
发表于 @ 2008年07月07日 12:13:00|评论(loading...)|收藏
TPL顾名思义,是文本处理库(或者你也可以理解为文本处理语言Text Processing Language,因为尽管它依附于C++语言,但是实际上你使用它时并不按照C++的思维考虑问题)。TPL目前主要关注文本处理中I的问题。即将文本Parse为内存数据结构(DOM)。TPL可以做什么?TPL有很强的适应性。可以做简单的如进行文本分割,复杂的可以做一个语言的编译器。TPL的典型使用场景: * 字符串分割 * 信息抽取(Information Retrieval) * 命令行分析(Command Line Analyzer) * 编译器(Compiler) * …TPL-1.0.00TPL的核心目前主要包含: * tpl/RegExp.h - 正则匹配文法 * tpl/Emulator.h - 一个通用虚拟机 (从根本上来讲,虚拟机和文本处理并无相关,但是一般虚拟机用于实现一门语言,而实现一门语言必然需要进行文本处理)TPL的扩展组件,包括: * tp阅读全文>
发表于 @ 2008年07月03日 01:44:00|评论(loading...)|收藏
TPL的核心目前主要包含: * tpl/RegExp.h - 正则匹配文法 * tpl/Emulator.h - 一个通用虚拟机 (从根本上来讲,虚拟机和文本处理并无相关,但是一般虚拟机用于实现一门语言,而实现一门语言必然需要进行文本处理)TPL的扩展组件,包括: * tpl/c/Lex.h - C/C++词法 * tpl/boost/Lambda.h - TPL与Boost Lambda的粘合剂 * tpl/ext/Calculator.h - 计算器辅助模块(计算器定义:一门简单语言,它不能定义由用户来定义函数/过程,但可以有变量)阅读全文>
发表于 @ 2008年06月24日 00:27:00|评论(loading...)|收藏
boost是一个非常优秀的库。问及多数C++程序员为什么最终没有选择Boost的原因,均回答:Boost太大,过于Heavy。是的。这也是我多数在用与不用Boost之间徘徊的原因。现在给大家介绍的这个bcp也许可以部分消除这样的不良影响,让我们有机会得以使用Boost这样优秀的库。阅读全文>
发表于 @ 2008年06月20日 16:22:00|评论(loading...)|收藏
C++ 中正则表达式(regex)库已经很多。光 boost 中就有3个:regex、spirit、xpressive。那么我们为什么还需要一个新的呢?多数正则表达式库都需要一个编译(compile)过程。即:通过解释一个正则表达式的字符串(pattern)来生成该正则表达式的内部表示(字节码)。例如 boost regex 就是这样。这类我们称之为动态正则表达式库。spirit、xpressive 例外。他们直接通过重载 C++ 的操作符来表达一个正则表达式。在你用C++语法描述完一个正则表达式,它已经是内部表示(被C++编译器编译成了机器码)。这一类我们称之为静态正则表达式库。阅读全文>
发表于 @ 2008年05月29日 01:23:00|评论(loading...)|收藏
gcc居然支持:int a = ({int i = 0; ++i; i;});
这是C++标准吗?阅读全文>
发表于 @ 2008年04月23日 14:50:00|评论(loading...)|收藏
通过 vector, list, deque 的时间、空间性能对比,我们可以看出,应该提倡尽可能使用 deque 这个容器。特别是,如果要承受海量数据,deque 是最合适的人选了。阅读全文>
发表于 @ 2008年04月04日 01:06:00|评论(loading...)|收藏
std::StringBuilder 基于 std::vector 实现。所以尽管本文讨论 std::vector,但是所有的结论对 std::StringBuilder 同样有效。阅读全文>
发表于 @ 2008年03月28日 02:59:00|评论(loading...)|收藏
字符串是什么?我们认为,与其说它是一个类,不如说它只是一个ADT(抽象数据类型)。阅读全文>
发表于 @ 2008年03月26日 22:31:00|评论(loading...)|收藏