C++ 中正则表达式(regex)库已经很多。光 boost 中就有3个:regex、spirit、xpressive。那么我们为什么还需要一个新的呢?多数正则表达式库都需要一个编译(compile)过程。即:通过解释一个正则表达式的字符串(pattern)来生成该正则表达式的内部表示(字节码)。例如 boost regex 就是这样。这类我们称之为动态正则表达式库。spirit、xpressive 例外。他们直接通过重载 C++ 的操作符来表达一个正则表达式。在你用C++语法描述完一个正则表达式,它已经是内部表示(被C++编译器编译成了机器码)。这一类我们称之为静态正则表达式库。阅读全文>
发表于 @ 2008年05月29日 01:23: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...)|收藏
StdExt的String(BasicString),和你以前见过的所有字符串类都不太一样。它的特别之处在于,它并不维护字符串的生命周期。这可能让你诧异:居然会有这样字符串类,它并不管理字符串的生命周期。但是我们这样做了。而这的确给我们带来很多便利。例如: * 赋值(复制)、子串(substr)是非常轻量的操作。Copy-On-Write技术完全是多余的。 * 可以将任意的线性容器(如std::vector、std::basic_string)临时转换为String(非常轻量)。参见下文中对String::cast方法的介绍。为什么String类可以不管理自己的生命周期?这就是我们StdExt的内存管理变革倡导的思想了。阅读全文>
发表于 @ 2008年03月23日 21:20:00|评论(loading...)|收藏
在介绍StdExt的时候,我曾经提到,STL设计精良,但是以下几块仍然设计不足(或缺失): * allocator(内存管理) * string(字符串处理/文本处理) * parallel programming(并行编程)关于内存管理,我们已经说得很多了。这里我们重点谈的是字符串处理/文本处理相关的问题。本篇是《字符串处理完整参考》这个系列的第一篇。阅读全文>
发表于 @ 2008年03月20日 22:08:00|评论(loading...)|收藏