QLIBCは現在、最も機能的に完全に、公開されているC/C ++ライブラリの1つです。 QLIBCプロジェクトの目標は、あらゆる種類のコンテナと一般的なライブラリルーチンを含むシンプルで強力な汎用C/C ++ライブラリを提供することです。一貫したAPIルックを備えた一般的なコンテナAPIの既製のセットを提供します。
QLIBCは、単純化されたBSDライセンスとして知られる2節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) | の上) |
| スペースの複雑さ | の上) | の上) | - | の上) |
| スペース割り当て | 動的 | 動的 | 事前配分 | 動的 |
| キー保存されたソート付き | はい | いいえ | いいえ | はい(オプション) |
| ユーザーコンパレータ | サポート | - | - | サポート |
| 重複したキー | いいえ | いいえ | いいえ | はい(オプション) |
| キー保存された消化 | いいえ | いいえ | はい | いいえ |
| 最寄りのキーを検索します | はい | いいえ | いいえ | いいえ |
| イテレーターサポート | はい | はい | はい | はい |
| ITERATORにアクセスしてください | min-> max | ランダム | ランダム | 注文を挿入します |
| スレッドセーフオプション | サポート | サポート | ユーザー | サポート |
| 共有Memを使用できます | いいえ | いいえ | はい | いいえ |
すべてのコンテナAPIには、一貫したルックアンドフィールがあります。基本的に、通常、コンテナ構造へのポインターを返す作成者関数を提供します。また、コンテナに関連するすべての機能は、コンテナ内の関数ポインターまたは従来のスタイルの直接アクセスAPIを介してアクセスできます。たとえば、
したがって、使用するコンテナに関係なく、 container->put(container, ...)を使用して要素をリストに配置するか、qtreetbl_pub(contain、...)などの直接APIを使用して呼び出すことができます。
以下の例は、それがどのように見えるかを示しています。
// 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を開発および改善するために協力したい人を探しています。現在、次のエリアに対して高い要求があります。
次の人々は、提案、アイデア、コード、またはバグの修正を手伝ってきました:(ファーストネームでアルファベット順に)
私たちがあなたの名前を忘れたり、スペルを間違えた場合は、お知らせください。