qlibc
qLibc 2.5.0 Release
QLIBC当前是功能最完整的,公开许可的C/C ++库之一。 QLIBC项目的目标是提供一个简单而强大的通用C/C ++库,其中包括各种容器和通用库例程。它提供了一组现成的公共容器API,具有一致的API外观。
QLIBC以2条规定的BSD许可(称为简化BSD许可证)发布。有关更多详细信息,请参考包装中包含的许可文件。
QLIBC核心API参考
QLIBC扩展API参考
| 特征 | 树表 | 哈希表 | 静态哈希表 | 列表表 |
|---|---|---|---|---|
| 数据结构 | 二进制树 | 插槽索引 | 块数组 | 链接列表 |
| 搜索复杂性 | o(log n) | o(1) / o(n) | o(1) / o(n) | 在) |
| 插入复杂性 | o(log n) | o(1) / o(n) | o(1) / o(n) | o(1) |
| 删除复杂性 | o(log n) | o(1) / o(n) | o(1) / o(n) | 在) |
| 空间复杂性 | 在) | 在) | - | 在) |
| 空间分配 | 动态的 | 动态的 | 预分配 | 动态的 |
| 密钥存储分类 | 是的 | 不 | 不 | 是(选项) |
| 用户比较器 | 支持 | - | - | 支持 |
| 重复的键 | 不 | 不 | 不 | 是(选项) |
| 钥匙存储消化 | 不 | 不 | 是的 | 不 |
| 搜索最近的密钥 | 是的 | 不 | 不 | 不 |
| 迭代器支持 | 是的 | 是的 | 是的 | 是的 |
| 迭代访问订单 | 最小 - >最大 | 随机的 | 随机的 | 插入顺序 |
| 线程安全选项 | 支持 | Suport | 用户 | 支持 |
| 可以使用共享的mem | 不 | 不 | 是的 | 不 |
所有集装箱API都具有一致的外观和感觉。它基本上提供了一个创建器功能,该功能通常返回指针到容器结构。此外,可以通过容器或传统样式直接访问API内的功能指针访问与容器相关的所有功能。例如,
因此,无论您使用哪个容器,都可以将元素放入带有container->put(container, ...)的列表中,也可以使用直接api(例如qtreetbl_pub(容器,...)来调用它们。
下面的示例说明了它的外观。
// create a hash-table.
qhashtbl_t *tbl = qhashtbl(0, QHASHTBL_THREADSAFE);
// add an element which key name is "score".
int x = 12345;
tbl->put(tbl, "score", &x, sizeof(int));
// get the value of the element.
int *px = tbl->get(tbl, "score", NULL, true);
if(px != NULL) {
printf("%dn", *px);
free(px);
}
// release table
tbl->free(tbl);
这是一个具有链接列表容器的相同实现。您可能会注意到,除了表创建中有1行以外,根本没有任何代码更改。这就是为什么QLIBC将相应的功能指针封装在容器对象的内部。
// create a linked-list-table. THE ONLY LINE YOU NEED TO CHANGE.
qlisttbl_t *tbl = qlisttbl(QLISTTBL_THREADSAFE);
// add an element which key name is "score".
int x = 12345;
tbl->put(tbl, "score", &x, sizeof(int));
// get the value of the element.
int *px = tbl->get(tbl, "score", NULL, true);
if(px != NULL) {
printf("%dn", *px);
free(px);
}
// release table
tbl->free(tbl);
我们正在寻找想要共同努力发展和改善QLIBC的人。目前,我们对以下领域有很高的要求。
以下人员帮助了建议,想法,代码或修复错误:(按字母顺序按名称)
如果我们忘记或拼错了您的名字,请告诉我们。