【发布时间】:2010-09-23 06:23:44
【问题描述】:
有人知道任何 C 容器库吗?我正在寻找能够提供链表、数组、哈希表等标准实现的东西,与 C++ STL 所做的方式非常相似。主要关注点是:
- 客户端代码应该能够为多种不同的数据类型创建容器,而无需修改库。
- 创建和使用容器的界面应该很直观。
【问题讨论】:
标签: c containers
有人知道任何 C 容器库吗?我正在寻找能够提供链表、数组、哈希表等标准实现的东西,与 C++ STL 所做的方式非常相似。主要关注点是:
【问题讨论】:
标签: c containers
我在寻找地图/字典容器的 C 实现时遇到了 SGLIB。不幸的是,没有地图,但它似乎包括您询问的容器。我不知道它有多好。
【讨论】:
Sglib 是一个优秀的通用数据结构库。该库目前提供以下通用实现:
速度非常快。更快的油嘴滑舌。它的灵感来自标准模板库。 Download here
另一个解决方案是Attractive Chaos sotware。 C 宏库:
kbtree.h:C 语言中的高效 B-tree 库。
khash.h:C 语言中快速且轻量级的哈希表库。
kvec.h:C 中的简单向量容器。
Kulesh Shanmugasundaram 提供通用 Linux 内核链接列表和基于 Linux 内核链接列表的通用哈希表。
Sglib 和 Attractive Chaos 软件和 Linux Kernel Linked List 是 C 宏库。使用void* 在 C 中实现通用容器可能效率低下。 C 宏模仿 C++ 模板,并且与 C++ 模板一样高效。
【讨论】:
void * 可能会指向整个进程的地址空间。
Chuck Falconer有一个不错的C语言哈希库,包含C++接口,点击网页上的hashlib.zip下载。
Ben Pfaff 有一个非常漂亮且文档非常完善的二叉树和平衡树库 GNU libavl,它实现了大多数主要的树结构,包括二叉搜索树、AVL 树、红黑树和每个树的线程版本。
libavl 在 LGPL 下获得许可(从 2.0.3 版开始),hashlib 是 GPL。
就数组和链表而言,我不确定您在寻找什么,因为前者由语言直接支持,而后者通常很简单,无需库即可实现。
【讨论】:
ccl怎么样?这是一个 C 的容器库。也许它最适合你。你可以看到https://code.google.com/p/ccl/。 尽情享受吧。
【讨论】:
【讨论】:
#include "queue.h" 可以访问单链表、单链尾队列、列表和尾队列的实现。
我发现 D. J. Bernstein (http://cr.yp.to/djbdns.html) 为在内存中存储任意对象的通用缓存既干净、简单又超快速。在 djdns tarball 中查找 cache.h 和 cache.c。
【讨论】:
我听说过(但从未使用过)的一些是
【讨论】:
这似乎涵盖了大部分容器和一些算法。也没有许可,所有标题都包含 - “代码可以不受限制地使用。” http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=13867&lngWId=3
【讨论】: