需要一个通用的库,纯C实现。

23

你能为我推荐一个好的用于C语言(纯C,不是C++)的通用数据容器库吗?我只需要基本的结构,比如动态数组和哈希表等。

(注:所谓“好”,是指速度快且接口优雅。)


1
我意识到这是一个(相当)重复的问题:在SO搜索工具中的第一行:https://dev59.com/LHVD5IYBdhLWcg3wXacd,还有更多,只需搜索“[c] glib库”。 - yves Baumes
3
Zifre - 不,这对我来说不是一个解决方案。我已经使用C++编程将近20年了,所以我不认为我需要任何关于可用的C++库的建议。在这里,我对纯C领域中正在发生的事情感兴趣。我非常满意这些答案,谢谢大家!特别是“C接口和实现”- 看起来像是一颗宝石。 - Igor Krivokon
目前我只是在想,为什么C标准委员会从未为常用的库提供标准化。据我所知,GLib相当常用?例如,C++委员会将STL带入了标准中...好吧,这是一个适合在SO上问的好问题吗?:P - yves Baumes
9个回答

15

2
这个链接已经过时了。这里是更新链接:http://developer.gnome.org/glib/ - Paul Merrill
@Jamer 谢谢。我已经更新了帖子,去掉了链接。 - yves Baumes

14

Apache可移植运行时库

http://apr.apache.org/

包含以下模块:

  • 平台定义
  • 内部内存分配
  • 原子操作
  • 动态对象处理
  • 环境操作函数
  • 错误代码
  • 文件信息
  • 文件I/O处理函数
  • 文件名匹配函数
  • 其他库程序函数
  • 命令参数解析
  • 全局锁程序
  • 哈希表
  • 通用库程序
  • MMAP(内存映射)程序
  • 网络程序
  • Poll程序
  • 内存池函数
  • 可移植性程序
  • 进程锁程序
  • 随机函数
  • Ring宏实现
  • 共享内存程序
  • 信号处理
  • 字符串程序
  • 内部APR支持函数
  • 表格和数组函数
  • 条件变量程序
  • 线程互斥锁程序
  • 线程和进程函数
  • 读写锁程序
  • 时间程序
  • 用户和组ID服务

14

我认为Dave Hanson的C接口与实现既快速又优雅。它包括许多不同类型的容器,一些字符串处理,多精度算术,异常以及几种不同的内存管理器。很棒。

有一本书,但您不需要购买它来使用该软件。


7

我之前推荐的MemSL现在已经无法访问,所以我建议使用glib,它涵盖了大部分相同的功能,并且在Linux社区得到广泛支持和使用。

我在实现x86内核时使用过MemSL,我发现它通用、可靠且无错误。

从描述中可以看出: C内存结构库(MemSL)概述

Memory Structures Library(MemSL)是一个有用的例程库,允许C语言中复杂数据结构的高效使用。MemSL包含管理以下内容的例程:

  • 多维动态分配数组
  • 单链表
  • 双向链表
  • 循环链表
  • 链表的剪切、复制和粘贴
  • 指向链表的多个位置指针
  • 堆栈
  • 队列
  • 双端队列
  • 集合
  • 袋子
  • 表格
  • 字典
  • 带分离链接的哈希表
  • 用户定义的分页哈希表
  • 动态分页哈希表
  • 二叉搜索树
  • 线索化二叉搜索树
  • AVL平衡二叉搜索树
  • AVL平衡线索化二叉搜索树
  • 优先堆
  • 完全动态优先搜索队列

MemSL的链接目前无法使用(截至2012年6月8日)。现在这个链接似乎有了MemSL:http://www.memorystructures.com/。下载链接指向http://sourceforge.net/projects/memsl2/(最后更新于2009年11月12日)。 - FooF
我更新了链接,现在应该可以正常工作了。 - Andrew Hundt
似乎MemSL已经不再维护了。我更新了我的回复以便注明这一点,并添加了一个链接到GLib,因为它可能是更好的替代品,而且具有广泛的支持。 - Andrew Hundt


5

您可能还想查看iMatix SFL,引用他们的网页:

iMatix的SFL(标准函数库)是一个可移植的C/C++程序函数库。经过多年的开发,SFL作为开源软件提供给互联网社区使用。SFL用ANSI C编写,并已移植到MS-DOS、Windows、OS/2、Linux和其他UNIX系统(IBM AIX、SunOS、HP/UX、Solaris、NetBSD、FreeBSD、SCO OpenServer、Digital UNIX以及Digital OpenVMS)。它附带完整的源代码和HTML文档。
SFL提供约450个函数,涵盖以下领域:
- 压缩、加密和编码; - 数据类型转换和格式化; - 日期、时间和日历; - 目录和环境访问; - 用户和进程组; - 反向位图索引; - 符号表; - 错误消息文件; - 配置文件; - 字符串操作和搜索; - 文件访问; - Internet套接字访问; - Internet编程(MIME、CGI); - SMTP(电子邮件)访问; - 服务器(批处理)编程; - 程序跟踪。
SFL是免费软件,您可以根据SFL许可协议进行私人或商业用途的使用和分发。

有关API本身的更多详细信息,请参见此处


4
"

Sglib 是一个通用的C语言库,受到了C++标准模板库的启发。

"

2
你可能有兴趣看一下 qLibc。

http://en.wikipedia.org/wiki/Qlibc http://www.qdecoder.org/qlibc/

这是一个通用的完整的C/C++库,包括各种容器和常用库例程。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接