快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

C/C++字符串处理(3):String ADT

    String ADT - 字符串只是抽象数据类型

    概要

    字符串是什么?我们认为,与其说它是一个类,不如说它只是一个ADT(抽象数据类型)。

    目前C++中的字符串类

    目前广泛采用的C++字符串类有二:std::string(basic_string,由STL提供)、CString(由MFC或者WTL提供)。它们的实现非常类似,都是带引用计数的、基于线性数据结构的字符串。不过SGI STL的Rope打破了这个规矩。它采用了一种基于树结构的组织方式来实现字符串。

    如何理解字符串只是ADT?

    我们知道,基于值的容器主要有:

    动态数组(std::vector)

    双向链表(std::list)

    单向链表(std::slist,非STL标准)

    双向队列(std::deque)

    std::deque其实是分段连续的、介于数组和链表之间的数据结构。这里不进行详细介绍,关于std::deque的介绍,请参见这里。

    这些容器都可以成为实现字符串的基础容器。例如,我们的StringBuilder基于std::vector实现;我们的TextPool基于std::deque实现。

    也许你有疑问:是的,基于std::vector或者std::deque可以理解,但是,这世上有基于链表的字符串吗?然而世界之大,确实无奇不有。据“不完全”统计,多数函数式语言(如Erlang)确实采用单向链表实现字符串。

    无论采用什么具体的实现,最后我们都会尽力去提供一个一致的字符串操作界面。所以,从这个意义上说,字符串只是一个ADT(抽象数据类型),它可以有多种实现,使用者按照具体的需求选择一种最合适自己用况的字符串类。

    字符串操作界面

    在StdExt库中,字符串这个ADT的规格定义如下:

    常字符串

    不可变的字符串类,应该至少包含以下方法:

 template <class

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论