当前位置:  开发笔记 > 编程语言 > 正文

C的容器类/库

如何解决《C的容器类/库》经验,为你挑选了5个好方法。

有谁知道任何C容器库?我正在寻找能够提供链接列表,数组,哈希表等标准实现的东西,就像C++ STL一样.主要关注点是:

    客户端代码应该能够为多种不同的数据类型创建容器而无需修改库.

    用于创建和使用容器的界面应该是直观的.

Nick Van Bru.. 23

我在寻找地图/字典容器的C实现时遇到了SGLIB.不幸的是,没有地图,但它似乎包括你询问的容器.我不知道它有多好.

http://sglib.sourceforge.net.



1> Nick Van Bru..:

我在寻找地图/字典容器的C实现时遇到了SGLIB.不幸的是,没有地图,但它似乎包括你询问的容器.我不知道它有多好.

http://sglib.sourceforge.net.


截至2013-07,该sourceforge项目似乎已经死亡.我注意到文档没有在任何地方提到"错误"这个词,也没有提到任何错误处理.Jacob Navia的C容器库在这方面要好得多,并且有大约370页的正式文档 - 但遗憾的是,他的ccl不是开源的.

2> Robert Gambl..:

Chuck Falconer有一个很好的用C编写的哈希库,包括一个C++接口,点击网页上的hashlib.zip进行下载.

Ben Pfaff拥有非常好且极其完善的二进制和平衡树库GNU libavl,它实现了大多数主要的树结构,包括二叉搜索树,AVL树,红黑树和每个树的线程版本.

libavl是根据LGPL许可的(从版本2.0.3开始),hashlib是GPL.

我不确定你在寻找什么,就数组和链表来说,前者是由语言直接支持的,后者通常是微不足道的,无需担保库就可以实现.


@Nick:使用Falconer的hashlib代码的权限真的没什么不清楚的:它显然是根据GPL许可的.如果您的商业代码与GPL条款一致(基本上如果您的商业代码也是GPL许可),则无需与他联系.如果您想要其他许可条款而不是GPL,他可以与您联系.
@Michael Burr:简称GPL和LGPL意味着不能在商业环境或真正的开源环境中使用.我也建议那些认为这是寻求其他地方解决方案的人.

3> Lear..:

Sglib是一个出色的通用数据结构库.该库目前提供通用实现:

排序数组

链表

排序链表

双链表

红黑树

哈希容器

它非常快.更快,更油腻.它的灵感来自标准模板库.在这里下载

另一种解决方案是Charming Chaos sotware.C宏库:
kbtree.h :C.khash.h中的高效B树库
:C. kvec.h中的快速和轻量级哈希表库
:C中的简单向量容器

Kulesh Shanmugasundaram提供了通用Linux内核链接列表和基于Linux内核链接列表的通用哈希表.

Sglib和有吸引力的混沌软件和Linux内核链接列表是C宏库.使用void*来实现用C通用容器可能是无效率的.C宏模仿C++模板,并且与C++模板一样高效.


您说过:“使用void *在C中实现通用容器可能效率不高。” -您能解释一下为什么会这样吗?

4> 小智..:

怎么样的ccl?这是C的容器库.也许它最适合你.您可以查看https://code.google.com/p/ccl/.好好享受.


@navicore已经给出了这个答案.他在谈论一个不同的库,它有几个像素不同的首字母缩略词.

5> navicore..:

我一直在使用我从Hanson的"C接口和实现"一书中增长的库.他的来源可以下载

cii书网站

一切都是抽象数据类型.有List,Set,Table(地图).


最后,您可以在http://code.google.com/p/cii/上找到该代码,并根据极其灵活的MIT许可证获得许可.
推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有