免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 96045 | 回复: 83

[C] cstl -- c语言编写通用数据结构和常用算法库(模仿SGI STL) [复制链接]

论坛徽章:
0
发表于 2009-04-09 21:25 |显示全部楼层
cstl是使用C语言编写的一个通用的数据结构和常用的算法库,它模忙SGI STL的接口和实现,支持vector,list,deque等等常用的数据结构,同时还支持排序,查找,划分等常用的算法,此外cstl也包含迭代器的类型,它作为容器和算法之间的桥梁。cstl为C语言编程中的数据管理提供了便利。

    在使用C语言编程的过程中,很多工作都是在管理数据,很多时候我都是在一遍又一遍的开发通用的数据结构如list,我想C语言中如果有一个像的STL那样的库那就节省了很多的时间和精力,但是在网上没有找到,所以决定自己写一个类似的库。

    库的特点就是要通用,如果一个list只能保存int类型或者是针对每一种类型都要有一个相应的list来保存如保存int类型的list_int保存 double类型的叫list_double,那就很麻烦并且也不够通用,但是cstl做到了数据结构的通用型cstl中的容器可以保存任何类型,不管是 int还是double或者是用户自定义的类型abc_t同一个容器都可以保存,例如cstl中双向链表容器list_t既可以保存int又可以保存 double,连用户自定义的类型abc_t都可以保存,只要通过一步创建就可以:
创建一个保存int类型的list_t:
list_t t_l = create_list(int);
这样这个t_l中保存的数据就是int类型的数据了。
又如:
typedef struct _tagabc
{
...
}abc_t;
list_t t_l2 = create_list(abc_t);
这样t_l2中保存的就是abc_t类型的数据了。

    cstl还提供了很多特性,想了解请参考cstl-1.0.0.tar.gz包中的cstl使用手册(cstl.pdf)和cstl参考手册(cstl_reference.pdf)。我已经贴到我的blog里了:activesys.cublog.cn
请将下载的包重命名为cstl-1.0.0.tar.gz

cstl-1.0.0.tar.gz

1.33 MB, 下载次数: 3262

评分

参与人数 2可用积分 +8 收起 理由
飞灰橙 + 2 极致美感,赞!
prolj + 6 正好需要呢 晚了一步,猫bz先下手了。

查看全部评分

论坛徽章:
0
发表于 2009-04-09 21:32 |显示全部楼层
大概看了下test目录下的代码,貌似楼主没能实现泛型?针对list和针对vector的sort,是用的不同的宏或函数吧?

论坛徽章:
0
发表于 2009-04-09 22:53 |显示全部楼层
牛,支持原创

论坛徽章:
1
寅虎
日期:2014-11-30 21:25:54
发表于 2009-04-10 01:14 |显示全部楼层
震撼啊 太强大的

论坛徽章:
0
发表于 2009-04-10 01:43 |显示全部楼层
看了一下,LZ写的太厉害了!赞一个。

另外这里好像有类似的实现
http://bbs.chinaunix.net/viewthread.php?tid=848385

论坛徽章:
0
发表于 2009-04-10 05:20 |显示全部楼层
Quite good ! But not a generic one ! what a pity !!!

论坛徽章:
0
发表于 2009-04-10 09:03 |显示全部楼层
问个问题:
代码test_algo.c中

  1. vector_t t_v = create_vector(int);
  2.         iterator_t t_i;

  3.         vector_init(&t_v);
  4.         vector_push_back(&t_v, 2);
  5.         vector_push_back(&t_v, 5);
  6.         vector_push_back(&t_v, 4);
  7.         vector_push_back(&t_v, 1);
  8.         vector_push_back(&t_v, 6);
  9.         vector_push_back(&t_v, 3);
  10. t_i = algo_find(vector_begin(&t_v), vector_end(&t_v), 3);
复制代码


如果这里我的数据类型是自定义的话,我看到algo_find里面最后得到的函数指针是fun_default_binary,这个好像就没有办法对自定义类型进行数据比较了吧?

论坛徽章:
0
发表于 2009-04-10 09:27 |显示全部楼层
原帖由 converse 于 2009-4-10 09:03 发表
问个问题:
代码test_algo.c中

vector_t t_v = create_vector(int);
        iterator_t t_i;

        vector_init(&t_v);
        vector_push_back(&t_v, 2);
        vector_push_back(&t_v, 5);
...

恩,我也觉得他这个对泛型没支持的不是很好

[ 本帖最后由 cugb_cat 于 2009-4-10 13:41 编辑 ]

论坛徽章:
0
发表于 2009-04-10 09:29 |显示全部楼层

回复 #8 cugb_cat 的帖子

不是支持的不好,是C语言本身的特点做不到真正的"范型",所以,任何人想用C去做"范型"几乎都是impossiable mission

论坛徽章:
0
发表于 2009-04-10 09:42 |显示全部楼层
注册:2007-8-7
最后登录: 2009-04-09
帖子:1
精华:1
两年发一帖就精了,强!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP