2008年11月份,为了不在使用C语言编程中一遍又一遍的实现链表,排序算法等等等等,我开始尝试编写通用数据结构和常用的算法,STL是一个好的参照,它的接口和实现很实用,我决定参照它使用C语言编写一个库。
最开始我把这个库命名为cstl,经历了半年的开发,我完成了1.0版本。我将它发到了CU上,大家觉得还可以,同时有人鼓励我将它开源,我想也是,可以与别人分享与别人合作,于是我就在google code上开了一个开源项目,改名为libcstl。
虽然libcstl 1.0开发了半年,但是1.0还是不完善,对于自定义的类型支持不够完善,此外还有很多别的缺陷。于是开始了2.0的开发,2.0很大程度上改变了1.0的使用方式,并且引进了很多新功能,也支持windows了。
很感谢支持libcstl的朋友们,同时希望大家多多支持。libcstl开源项目地址:http://code.google.com/p/libcstl/
- libcstl是使用ANSI C编写的通用的数据结构和常用算法的库, 它模仿STL的接口形式,
包括序列容器,关联容器,容器适配器,迭代器,函数,算法等.libcstl为C编程中的数据管理提供了方便易用的程序库。 - libcstl
分为容器,迭代器,函数和算法四部分,此外2.0版本还添加了类型机制,这是一种为用户提供了方便使用自定义类型的机制。 - 容器一种用
于保存数据的类型,按照功能分为序列容器,关联容器和容器适配器。序列容器是按照数据插入的顺序保存数据,关联容器中保存的数据是根据某种规则排序的,容
器适配器是在容器的基础上对容器进行封装从而实现特定的功能,容器适配器不支持迭代器操作,因此适配器也不能够用于算法操作。 - 迭代器
表现的是一种指针的语义,它是对位置操作的一种类型,但是迭代器是通用的,通过迭代器可以实现对任何容器的位置操作,同时它也是容器和算法的桥梁,算法通
过迭代器对容器中的数据进行操作。 - 算法是通用的,它通过迭代器来操作数据区间中的数据,这样就可以对任何符合要求的容器以及数据区间
应用算法。正式因为通用的关系,相同功能的算法和容器本身的操作函数,后者更高效。 - 函数以及谓词是规范算法行为的,可以使用特定的函
数或者算法来改变算法的行为,带有if后缀的算法都要求使用函数或者谓词。 - 字符串是一种特殊的容器,它只保存字符类型,同时也支持许
多针对字符串特有的操作。 - 类型机制是2.0添加的新功能,它为用户使用自定义类型提供了便利,可以让用户像使用基本类型一样使用自定
义类型。
GettingStartedGuide
可以使你了解更多。
libcstl
2.0与1.0相比有了很大的改进,下面列出了不同点:
类型和功能 | 1.0 | 2.0 | 说 明 |
deque_t | 支持 | 支持 | |
list_t | 支持 | 支持 | |
vector_t | 支持 | 支持 | |
slist_t | 支持 | 支持 | |
set_t | 支持 | 支持 | |
multiset_t | 支持 | 支持 | |
map_t | 支持 | 支持 | 更新了默认的数据比较规 则。 |
multimap_t | 支持 | 支持 | 更新了默认的数据比较规则。 |
hash_set_t | 支持 | 支持 | 更新了默认的哈希函数。 |
hash_multiset_t | 支持 | 支持 | 更新了默认的哈希函数。 |
hash_map_t | 支持 | 支持 | 更新的默认的哈希函数和默 认的数据比较规则。 |
hash_multimap_t | 支持 | 支持 | 更新的默认的哈希函数和默认的数据比较规则。 |
priority_queue_t | 支持 | 支持 | |
queue_t | 支持 | 支持 | |
stack_t | 支持 | 支持 | |
多种 iterator_t |
支持 | 支持 | |
range_t | 支持 | 一种表示数据范围的类型。 | |
数值算法 | 支持 | 支持 | |
通用算法 | 支持 | 支持 | |
针对基本类型的函数 | 支持 | 支持 | |
针对libcstl内部 类型的函数 |
支持 | 增加了针对容器以及工具类型的函数和谓词。 | |
string_t | 支持 | 支持 | |
pair_t | 支持 | 支持 | 更新了默认的数据比较规 则。 |
bool_t | 支持 | 支持 | |
支持c style字符串 | 支持 | 增加了对于c style字符串类型的支持。 | |
支持用 户自定义类型 |
部分支持 | 支持 | 通过类型注册机制完善了对用户自定义类型的支持。 |
类型注册 | 支持 | 增加了类型注册和类型复制功能。 | |
支持Linux | 支持 | 支持 | |
支持Windows | 支持 | 添加了VS2005和 VS2008的编译工程。 |