有阅读过或者了解过libcstl的mac 代码阅读工具吗?质量能否满足生产环境

3780人阅读
数据结构(22)
算法基础/设计/分析(27)
libcstl简介
libcstl是一个应用于C语言编程的函数库,它将编程过程中经常使用的数据结构如向量、链表、集合、树等封 装成相应的数据结构并提供一系列的操作函数来操作保存在这些数据结构中的数据,同时它还将常用的算法如 排序、查找、划分等封装成相应的算法函数并提供迭代器来使两者之间建立联系方便使用。从libcstl的名字 就可以看出它于STL有一定的关系,是的libcstl的接口和实现都是模仿了STL。
libcstl的产生主要是基于使用C语言编程过程中经常要使用向量、链表、集合等数据结构和排序、查找、划分 等算法,但是对于这些数据结构和算法每次都要重复的实现,如果有一个通用的类似于STL的数据结构和算法 的库就可以节约时间和成本,这样libcstl就诞生了。
libcstl编译和安装
在libcstl-2.0.2中使用configure选项来支持2.0.的编译配置。
关闭控制断言(--disable-assert)
定义这个选项可以去掉库中的断言.当库函数接受到非法参数时,断言就会报错,但是有断言的版本执行效率低 (非断言版本效率大约是有断言版本的 20~40 倍).&
开启内存管理(--with-memory-management)
这个选项可以开启内存管理,默认情况下内存管理是关闭的。&
配置 stack_t 适配器的底层实现(--enable-stack-implementation=ARGUMENT)
这个选项是配置 stack_t 适配器的底层实现的。ARGUMENT 作为 stack_t 的底层实现,ARGUMENT 可以是 vector(--enable-stack-implementation=vector)和 list(--enable-stack-implementation=list), 默认使用 deque_t 作为 stack_t的底层实现.
配置 queue_t 适配器的底层实现(--enable-queue-implementation=ARGUMENT)
这个选项是配置 queue_t 的底层实现,ARGUMENT 作为 queue_t 的底层实现,ARGUMENT 是 list(--enable-queue-implementation=list),默认使用 deque_t 为 queue_t 的底层实现.
配置 set_t 的底层实现(--enable-set-implementation=ARGUMENT)
配置 multiset_t 的底层实现(--enable-multiset-implementation=ARGUMENT)
配置 map_t 的底层实现(--enable-map-implementation=ARGUMENT)
配置 multimap_t 的底层实现(--enable-multimap-implementation=ARGUMENT)
以上四个选项是配置关联容器的底层实现的,ARGUMENT 的可选参数是 avl-tree,关联容器默认使用红黑树作为 底层实现(红黑树比 avl 树快 40%)。默认使用红黑树作为底层实现。
libcstl基本概念
libcstl由多个分组成,容器,迭代器,算法和函数 容器: 容器以某种结构形式管理数据的集合,每一种容器都有各自的特点. 迭代器: 迭代器与容器相关联,应用与容器或容器的子集,它的主要好处在于为容器提供了一个统一的接口.迭代器是容器 和算法之间的桥梁,它使得算法独立于特定的容器. 算法: 算法是对数据集合进行某些操作,它可以排序,查找,修改或其他一些操作.算法使用迭代器作为输入,这样算法可
以独立于容器,实现在任意容器上的操作.同时算法还使用特定的函数对容器中的数据进行特定的操作. 函数: 函数只是规定了算法中使用的函数形式,并且定义了一些算法中常用的函数,可以作为算法的自定义规则.
容器可以用来排序数据,管理和存储数据,所以为了不同的目的libcstl提供了不同的容器.容器分为: 序列容器: 序列容器主要用来存储和管理数据,容器中的数据的顺序与数据插入到容器中的次序有关,而与数据本身的值无关. libcstl提供的序列容器有:vector_t, list_t, deque_t, slist_t. 关联容器: 关联容器更关系容器中数据的排列顺序,容器中数据的顺序是排序的与数据本身有关而与数据插入到容器中的次
序无关.libcstl 提供的关联容器有:set_t, map_t, multiset_t, multimap_t, hash_set_t, hash_map_t, hash_multiset_t, hash_multimap_t. 容器适配器: 除了以上这些容器之外,libcstl为了特殊的目的还提供了容器适配器,它们都是基本的容器实现的. 容器适配器有:stack_t,queue_t,priority_queue_t. 字符串类型: string_t类型可以像c-str一样拷贝,赋值,比较而不必考虑是否有足够的内存来保存字符串,会不会越界等等.
因为string_t可以动态增长,并且易于使用,你可很方便的插入删除字符或子串,方便的替换等等.
迭代器是对容器的特定范围的数据进行遍历的类型,这个范围可能是整个容器或者是容器的一部分.迭代器表示的 是容器中数据的位置的数据结构,它将各个容器的数据位置统一,使用同样的接口进行操作。各个容器都提供了迭代器结构, 同时各种算法都是通过迭代器来操作的,所以说迭代器是容器和算法之间联系的桥梁。
libcstl为了处理数据提供了许多算法,例如查找,排序,拷贝,修改还有算术操作.算法不属于任何一种容器,它能 够处理任何容器中的数据,算法都是以迭代器作为输入
容器使用代码
以vector_t例子介绍容器的使用,容器的使用可以分为四步:
1.创建容器
2.初始化容器
3.对容器操作
4.销毁容器
以下是使用容器的代码,其中对容器遍历用了两种方法,一种是迭代器,一种是用下标,建议遍历的时候使用迭代器。
运行结果如下:
libcstl适用的数据类型
上面这些例子使用的都是基本的数据类型,但是在实际的编程过程中经常使用的是自定义的数据结构类型,libcstl-1.0不能够有效的 处理这些数据类型的,但是libcstl-2.0.0相对于1.0.1来说最大的提高就是增强了对各种数据类型的处理能力。libcstl-2.0.0有效的 处理绝大部分的数据类型。它将数据类型分为3类:
1.C语言内建类型:如:int, long, double等。
2.用户自定义类型:用户自己定义的数据结构。
3.libcstl内建类型:如vector_t, set_t, hash_multimap_t等。&
其中libcstl内建类型是用户自定义类型的特例,只是libcstl对于libcstl内建类型进行了默认的处理
自定义数据类型使用例子
使用自定义数据类型步骤如下:
1.定义数据类型
2.定义与该数据类型相对应的初始函数,拷贝,比较函数,销毁函数
3.使用type_register(user_t, user_init, user_copy, user_less, user_destroy);注册
4.创建容器
5.初始化容器
6.操作容器
7.销毁容器
运行结果如下:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:251938次
积分:2319
积分:2319
排名:千里之外
原创:26篇
转载:108篇
评论:26条
(1)(6)(1)(4)(1)(2)(2)(1)(1)(2)(1)(4)(12)(1)(6)(19)(2)(2)(6)(1)(3)(4)(2)(49)(1)Linux(54)
编程框架(2)
c语言(5)
libcstl:标准C语言通用数据结构和常用算法库
libcstl是什么?
libcstl是使用标准C语言编写的通用数据结构和常用算法库。
libcstl模仿STL的接口形式,包括序列容器、关联容器、容器适配器、迭代器、函数和算法。libcstl为C编程中的数据管理提供了方便简易的开发库。 libcstl除了包括容器,迭代器,函数和算法四部分外,还包括类型机制以及内存管理。 类型机制允许用户在容器中保存任何类型的数据,这其中包括C内建的类型, libcstl内建的类型以及用户自定义的类型。内存管理采用内存池的方式帮助用户减少内存分配带来的碎片。 libcstl可以很好的运行在类Unix系统上,如Linux,
FreeBSD等。 运行在Windows上时由于VC对C99的某些特性不支持,所以一些功能会受到限制。 接下来让我们学学如何使用libcstl吧!
学习libcstl
欢迎使用libcstl!
学习使用libcstl并不难,首先你要对它有个整体的认识, 入门指南可以帮助你。 对libcstl有了整体的认识之后,您就可以进一步学习libcstl的各种容器、迭代器、算法等等。 教程中对libcstl的各种概念以及用法有着深入的讲解。 libcstl中组件和接口函数众多,您可能不时的需要参考一些接口的声明以及用法细节。 参考手册中可以找到libcstl所有接口的细节描述。 您在使用libcstl的过程中可能会遇到一些问题,
FAQ列举了一些常见的问题以及解决方法。 OK,您已经了解了libcstl的使用,现在可以试着修改libcstl了!
欢迎Hacking libcstl!
libcstl的代码都托管在GitHub, 您可以随时到GitHub上fork代码。 如果您想参与进来,我们非常欢迎。您可以从测试开始,如果发现libcstl的bug, 请提交到这里并且注明版本, 非常感谢。 如果您对libcstl的代码有了一些了解,可以尝试修改一些bug, 它们都在这里。 修改bug的同时要添加测试代码,同时要保证以前的测试用例全部通过。然后就可以Pull Request了。 您还可以参与到新功能的开发上来,这里有一些新功能的列表,
您可以在其中选择一些功能,然后在自己的分支中进行开发。同时不要忘记了为新代码添加测试用例。 好了,您可以开始工作了。赶快开始吧!
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:6073次
排名:千里之外
转载:76篇
(14)(60)(1)(2)libcstl---libc STL
项目主页:
想深入的了解libcstl-2.0请参考源码包中doc/目录下的libcstl_user_guide.pdf和libcstl_reference_manual.pdf。
libcstl getting started guide.
libcstl是什么,为什么会有libcstl?
libcstl是一个应用于C语言编程的函数库,它将编程过程中经常使用的数据结构如向量、链表、集合、树等封 装成相应的数据结构并提供一系列的操作函数来操作保存在这些数据结构中的数据,同时它还将常用的算法如 排序、查找、划分等封装成相应的算法函数并提供迭代器来使两者之间建立联系方便使用。从libcstl的名字 就可以看出它于STL有一定的关系,是的libcstl的接口和实现都是模仿了STL。
libcstl的产生主要是基于使用C语言编程过程中经常要使用向量、链表、集合等数据结构和排序、查找、划分 等算法,但是对于这些数据结构和算法每次都要重复的实现,如果有一个通用的类似于STL的数据结构和算法 的库就可以节约时间和成本,这样libcstl就诞生了。
编译和安装
首先将下载的压缩包libcstl-2.0.0.tar.gz解压(这里只列出了Linux上的编译和安装方式):
[wb@ActiveSys ~]$ tar zxvf libcstl-2.0.0.tar.gz
[wb@ActiveSys ~]$ cd libcstl-2.0.0
然后执行make编译源代码:
[wb@ActiveSys libcstl-2.0.0]$ make
接下来是安装libcstl库,安装需要root权限:
[wb@ActiveSys libcstl-2.0.0]# make install
同样卸载库和更新库也需要root权限:
[wb@ActiveSys libcstl-2.0.0]# make uninstall
[wb@ActiveSys libcstl-2.0.0]# make update
Windows上的编译可在解压后目录中的built-win目录下找到vc8和vc9两个目录,分别是VS2005和VS2008的工程文件目录。
libcstl基本概念
libcstl由多个分组成,容器,迭代器,算法和函数 容器: 容器以某种结构形式管理数据的集合,每一种容器都有各自的特点. 迭代器: 迭代器与容器相关联,应用与容器或容器的子集,它的主要好处在于为容器提供了一个统一的接口.迭代器是容器 和算法之间的桥梁,它使得算法独立于特定的容器. 算法: 算法是对数据集合进行某些操作,它可以排序,查找,修改或其他一些操作.算法使用迭代器作为输入,这样算法可 以独立于容器,实现在任意容器上的操作.同时算法还使用特定的函数对容器中的数据进行特定的操作. 函数: 函数只是规定了算法中使用的函数形式,并且定义了一些算法中常用的函数,可以作为算法的自定义规则.
人气:1567
Copyright (C) , All Rights Reserved.
版权所有 闽ICP备号
processed in 0.040 (s). 13 q(s)博客访问: 97391
博文数量: 18
博客积分: 770
博客等级: 上士
技术积分: 212
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: C/C++
这个版本主要是移植性bug的修复,修改的在64位系统上出现的问题,同时使用了GNU Autotools来管理包的编译和安装。
阅读(3844) | 评论(9) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
在哪里下载?
有代码吗?我想看看啊
我是 libcstl 的支持者,在使用过程中发现点问题,不知道是有意这么做的还是属于她本身的缺陷。关于 string_append_subcstr 函数,当我的字符串中包含 '\0' 时,如字符串 "hello\0, world",我即使给它指定长度 13 也无法满足需求,'\0' 后的数据都会被截断,像 c++ 中的 stl 里可以使用 buffer += string("hello\0, world", 13) 实现,这种应用对于串口解析非常有用,不知道是我使用的函数不当还是什么问题,希望引起 wb 大人关注。
写的非常好
学习中..............
请登录后评论。}

我要回帖

更多关于 linux源代码阅读 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信