Chinaunix

标题: libcstl-2.0.0正式发布。 [打印本页]

作者: tm_wb    时间: 2010-06-09 21:24
标题: libcstl-2.0.0正式发布。
本帖最后由 tm_wb 于 2010-06-09 21:26 编辑

libcstl是使用ANSI C编写的通用的数据结构和常用算法的库, 它模仿STL的接口形式, 包括序列容器,关联容器,容器适配器,迭代器,函数,算法等.libcstl为C编程中的数据管理提供了方便易用的程序库。

    libcstl分为容器,迭代器,函数和算法四部分,此外2.0版本还添加了类型机制,这是一种为用户提供了方便使用自定义类型的机制。

    容器一种用于保存数据的类型,按照功能分为序列容器,关联容器和容器适配器。序列容器是按照数据插入的顺序保存数据,关联容器中保存的数据是根据某种规则排序的,容器适配器是在容器的基础上对容器进行封装从而实现特定的功能,容器适配器不支持迭代器操作,因此适配器也不能够用于算法操作。

    迭代器表现的是一种指针的语义,它是对位置操作的一种类型,但是迭代器是通用的,通过迭代器可以实现对任何容器的位置操作,同时它也是容器和算法的桥梁,算法通过迭代器对容器中的数据进行操作。

    算法是通用的,它通过迭代器来操作数据区间中的数据,这样就可以对任何符合要求的容器以及数据区间应用算法。正式因为通用的关系,相同功能的算法和容器本身的操作函数,后者更高效。

    函数以及谓词是规范算法行为的,可以使用特定的函数或者算法来改变算法的行为,带有if后缀的算法都要求使用函数或者谓词。

    字符串是一种特殊的容器,它只保存字符类型,同时也支持许多针对字符串特有的操作。

    类型机制是2.0添加的新功能,它为用户使用自定义类型提供了便利,可以让用户像使用基本类型一样使用自定义类型。

GettingStartedGuide可以是你了解更多。
libcstl-2.0.0.tar.gz (3.25 MB, 下载次数: 1201)
libcstl_user_guide.pdf (1.46 MB, 下载次数: 976)
libcstl_reference_manual.pdf (1.98 MB, 下载次数: 927)
libcstl开源项目首页
作者: c/unix    时间: 2010-06-09 21:30
提示: 作者被禁止或删除 内容自动屏蔽
作者: vbs100    时间: 2010-06-09 21:40
{:3_187:}
作者: shang2010    时间: 2010-06-09 22:14
这东西不会是windows下低
作者: 没本    时间: 2010-06-09 22:19
顶,这个比那个Coo实在多了。
作者: nizvoo    时间: 2010-06-09 22:21
上次的版本下载还没有仔细阅读,有更新了么?
作者: 没本    时间: 2010-06-09 22:28
这东西不会是windows下低
shang2010 发表于 2010-06-09 22:14



    是ANSI C的。
作者: bill15    时间: 2010-06-09 22:30
顶你
敬仰
作者: tianxiaogang12    时间: 2010-06-09 22:42
正在看1.0.0  楼主写得很有含金量 顶
作者: 群雄逐鹿中原    时间: 2010-06-09 22:44
1.0.0版浏览过,写的非常清晰。
是所看到过的最优雅的库。
作者: tjpm    时间: 2010-06-09 23:08
顶一下

顺便拜膜一下大牛
作者: hellioncu    时间: 2010-06-10 08:36
虽然我的项目都是用C++的,还是支持下
作者: axlrose    时间: 2010-06-10 09:26
强,顶一个
作者: liexusong    时间: 2010-06-10 09:31
楼主好强!学习下!
作者: egmkang    时间: 2010-06-10 09:37
顶你个肺
作者: tm_wb    时间: 2010-06-10 21:40
谢谢大家对libcstl项目的关注。
作者: tm_wb    时间: 2010-06-19 07:06
这东西不会是windows下低
shang2010 发表于 2010-06-09 22:14


提供了vs2005和vs2008的工程,在build-win/vc8和vc9中。
作者: tm_wb    时间: 2010-06-19 07:23
正在看1.0.0  楼主写得很有含金量 顶
tianxiaogang12 发表于 2010-06-09 22:42


把1.0扔掉吧,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的编译工程。

作者: 群雄逐鹿中原    时间: 2010-06-19 10:02
顶楼主。。

有没支持到全局的memory pool,
这样能提高多个容器的工作效率。

但是全局的memory pool的话,又会有线程锁的问题,也麻烦。
作者: wmmy2008    时间: 2010-06-19 14:26
顶,,拜读。。
作者: wmmy2008    时间: 2010-06-19 16:48
回复 1# tm_wb


    LZ,看了一下你的vector_t容器的代码,,问个问题

  一个vector_t容器能否同时存不同类型的数据 , 如果可以,那取是如何做的。。。还有是否能存任何的数据类型,如struct,,,请教..
作者: tm_wb    时间: 2010-06-19 20:14
回复  tm_wb


    LZ,看了一下你的vector_t容器的代码,,问个问题

  一个vector_t容器能否同时存不 ...
wmmy2008 发表于 2010-06-19 16:48



    我使用例子回答你的问题吧
例如:
vector_t* pvec_a = create_vector(int);

对于pvec_a只能够保存int类型的数据,不能保存其他类型的数据了,如果你需要在pvec_a中再保存非int类型的数据,这是做不到的。

libcstl 2.0中容器可以保存任何类型的数据,如:
/* 保存C语言内部类型 */
vector_t* pvec_int = create_vector(int);
vector_t* pvec_double = create_vector(double);
/* 保存libcstl 提供的类型 */
vector_t* pvec_set = create_vector(set_t<int>);
vector_t* pvec_hmap = create_vector(hash_map_t<int, list_t<double>>);
/* 保存自定义类型的数据 */
struct _tagabc
{
    ...
}abc_t;
vector_t* pvec_abc = create_vector(struct _tagabc);
或者
vector_t* pvec_abc = create_vector(abc_t);

但是对于自定义类型必须使用type_register来注册该类型,才能够创建成功,否则create_vector将失败。
要想让libcstl将struct _tagabc和abc_t识别为同一个类型还要调用type_dupliacte。

这样libcstl 2.0容器可以保存任何类型的数据。

主要就是libcstl 2.0中增加了类型机制来保存类型信息。具体的使用方法请参考libcstl的用户指南。
作者: xie995    时间: 2010-06-19 21:20
果断下载收藏
拜一下LZ
作者: 专操五毛    时间: 2010-06-19 22:34
顶啊。不错不错。
作者: ubuntuer    时间: 2010-06-20 00:16
不错 看看
作者: suavelee    时间: 2010-06-21 08:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: rain_fish    时间: 2010-06-21 08:47
回复 22# tm_wb


    lz,佩服佩服,请问有没有memory pool?
作者: _cer    时间: 2010-06-21 08:53
膜拜学习
作者: rain_fish    时间: 2010-06-21 08:58
回复 1# tm_wb


    请问lz,这个库和stl相比较,区别是什么?优势是什么?
作者: rain_fish    时间: 2010-06-21 09:07
lz写的接口,看起确实很舒服,希望lz有关于memory pool的封装。。。。。。。{:3_200:}
作者: tm_wb    时间: 2010-06-21 19:36
回复 27# rain_fish


    在内部实现了简单的内存池(src/cstl_alloc.c),但是没有对外开放接口,我会考虑在以后的版本中优化内存池并将其开放。
作者: tm_wb    时间: 2010-06-21 19:50
回复 29# rain_fish


    我只是想在C语言编程中方便的使用常用的数据结构和算法,STL封装了几乎全部常用的数据结构和算法,所以决定模仿STL。STL是一个伟大的作品,libcstl是无法和STL相比的,无论是在功能上(例如,libcstl的函数只是对于STL函数的简单的模仿)还是效率上都是远远不如STL。
作者: rain_fish    时间: 2010-06-21 21:42
回复  rain_fish


    在内部实现了简单的内存池(src/cstl_alloc.c),但是没有对外开放接口,我会考虑 ...
tm_wb 发表于 2010-06-21 19:36



    学习一下。。
作者: ling0088    时间: 2010-06-21 22:23
膜拜大牛 顺便新人混脸熟
作者: everlasting_188    时间: 2010-06-24 14:25
不错,写的真的不错,学习下!
作者: tm_wb    时间: 2010-06-26 05:56
{:3_191:}最近发现在64位系统上安装有些问题。
作者: wingimg    时间: 2010-06-29 23:58
提示: 作者被禁止或删除 内容自动屏蔽
作者: linuxlixk    时间: 2010-06-30 10:30
拿分走人
作者: langyoulu    时间: 2010-06-30 13:38
顶一下,好东东。
作者: ecjtubaowp    时间: 2010-07-02 17:37
顶啊,很强大
作者: xiaobenniao514    时间: 2010-12-28 14:03
顶顶顶!!!
作者: zhujiang73    时间: 2010-12-28 14:50
回复 1# tm_wb


    支持。
作者: bangziFnst    时间: 2010-12-28 15:57

作者: xiaobenniao514    时间: 2010-12-29 09:36
不会安装,环境aix,make之后发现:
make: There must be an existing description file or specify a target.
是不是少了什么文件.
运行install-sh也报了错 no input file specified.
make install也报错。
不知道什么原因
作者: xiaobenniao514    时间: 2010-12-29 10:11
source='cstl_algo.c' object='libcstl_la-cstl_algo.lo' libtool=yes  DEPDIR=.deps depmode=aix /bin/sh ../depcomp  /bin/sh ../libtool  --tag=CC   --mode=compile cc -qlanglvl=ansi -qlanglvl=extc99 -DHAVE_CONFIG_H -I. -I..  -I./..  -Wall -Wextra -g -c -o libcstl_la-cstl_algo.lo `test -f 'cstl_algo.c' || echo './'`cstl_algo.c
libtool: compile:  cc -qlanglvl=ansi -qlanglvl=extc99 -DHAVE_CONFIG_H -I. -I.. -I./.. -Wall -Wextra -g -c -M cstl_algo.c  -DPIC -o .libs/libcstl_la-cstl_algo.o
cc: 1501-210 command option Wall contains an incorrect subargument
make: 1254-004 The error code from the last command is 1.


Stop.
make: 1254-004 The error code from the last command is 1.


Stop.
make: 1254-004 The error code from the last command is 2.


Stop.
作者: empty141    时间: 2010-12-29 22:23
赞一个~LZ大牛
作者: 雨过白鹭洲    时间: 2010-12-31 10:12
其实我也一直想要写一个这样的库,楼主写出来还共享出来,精神可嘉!
作者: d19890104    时间: 2010-12-31 13:36
抱着学习代码的方式来顶的{:3_195:}
作者: Tingt_Li    时间: 2011-01-03 21:06
谢谢楼主分享
作者: flw    时间: 2011-01-03 21:33
提个用户手册的 BUG。

第六章第三节,算法的种类,

algo_reverse_if 写错了,疑为 algo_reverse_copy
作者: tm_wb    时间: 2011-01-03 23:06
回复 50# flw
谢谢,这确实是个bug。
作者: pandaiam    时间: 2011-10-09 17:19
楼主高手啊。
下来学习一下。
作者: lxpursue    时间: 2011-10-09 22:32
希望有更多这样的东西。。
作者: firefalcon1    时间: 2011-10-12 19:38
感谢楼主分享!哈哈
作者: yulihua49    时间: 2011-10-13 10:11
libcstl是使用ANSI C编写的通用的数据结构和常用算法的库, 它模仿STL的接口形式, 包括序列容器,关联容器,容 ...
tm_wb 发表于 2010-06-09 21:24



    收了,非常不错。
作者: ezioma    时间: 2011-10-13 10:25
感谢lz分享
下载了,慢慢看,rtfsc……
作者: corefix    时间: 2011-10-13 13:02
顶楼主,好东西啊!
作者: langyoulu    时间: 2011-10-13 15:43
这个要顶一下.
作者: yulihua49    时间: 2014-08-18 15:44
本帖最后由 yulihua49 于 2014-08-18 16:08 编辑

支持楼主。
新的2.0.2版有吗?听说改了些bug。
能否提供永久的下载地址?以便及时得到最新版本?
作者: hanxin83    时间: 2014-08-18 15:58
非常棒, 上次看到的也是楼主的?
作者: yulihua49    时间: 2014-08-18 16:09
hanxin83 发表于 2014-08-18 15:58
非常棒, 上次看到的也是楼主的?

这贴应该永久置顶。
作者: oceanstack    时间: 2014-08-21 11:26
非常非常非常滴好 !{:3_189:}
作者: inurl    时间: 2014-08-22 14:44
  是不是要先学 c++的 STL




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2