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的人。目前,我們對以下領域有很高的要求。
以下人員幫助了建議,想法,代碼或修復錯誤:(按字母順序按名稱)
如果我們忘記或拼錯了您的名字,請告訴我們。