QLIBC ist derzeit eine der funktional vollständigsten, öffentlich lizenzierten C/C ++-Bibliotheken. Ziel des QLIBC -Projekts ist es, eine einfache und leistungsstarke C/C ++ - Bibliothek mit C/C ++ -Bibliothek bereitzustellen, die alle Arten von Containern und allgemeinen Bibliotheksroutinen enthält. Es bietet einen vorgefertigten Satz gemeinsamer Container-APIs mit einem konsistenten API-Look.
QLIBC wird unter der 2-Klausel-BSD-Lizenz veröffentlicht, die als vereinfachte BSD-Lizenz bezeichnet wird. Weitere Informationen finden Sie in dem im Paket enthaltenen Lizenzdokument.
QLIBC -Kern -API -Referenz
QLIBC -Erweiterungs -API -Referenz
| Eigenschaften | Baumtisch | Hash -Tisch | Statische Hash -Tabelle | Listentabelle |
|---|---|---|---|---|
| Datenstruktur | Binärbaum | Slot -Index | Blockarray | Verbindungsliste |
| Suchkomplexität | O (log n) | O (1) / o (n) | O (1) / o (n) | An) |
| Komplexität einfügen | O (log n) | O (1) / o (n) | O (1) / o (n) | O (1) |
| Komplexität löschen | O (log n) | O (1) / o (n) | O (1) / o (n) | An) |
| Raumkomplexität | An) | An) | - - | An) |
| Raumzuweisung | Dynamisch | Dynamisch | Voranierung | Dynamisch |
| Key gespeichert sortiert | Ja | NEIN | NEIN | Ja (Option) |
| Benutzervergleich | Unterstützt | - - | - - | Unterstützt |
| Duplizierte Schlüssel | NEIN | NEIN | NEIN | Ja (Option) |
| Schlüssel gespeichert | NEIN | NEIN | Ja | NEIN |
| Suchen Sie den nächsten Schlüssel | Ja | NEIN | NEIN | NEIN |
| Iteratorunterstützung | Ja | Ja | Ja | Ja |
| Iterator Besuchsbestellung | min -> max | zufällig | zufällig | Bestellung einfügen |
| Thread-Safe-Option | Unterstützt | Gesetzt | Benutzer | Unterstützt |
| Kann gemeinsam genutzte Mem verwenden | NEIN | NEIN | Ja | NEIN |
Alle Container -APIs haben ein konsequentes Erscheinungsbild. Es bietet im Grunde eine Erstellerfunktion, die normalerweise einen Zeiger auf eine Containerstruktur zurückgibt. Außerdem können alle Funktionen im Zusammenhang mit dem Container über Funktionszeiger innerhalb des Containers oder im traditionellen Style Direct Access -APIs zugegriffen werden . Zum Beispiel,
Unabhängig davon, welchen Container Sie verwenden, können Sie einfach Elemente in eine Liste mit container->put(container, ...) einfügen oder sie können sie mit direkter API wie qtreetbl_pub (Container, ...) aufrufen.
Ein Beispiele unten zeigt, wie es aussieht.
// 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);
Hier ist eine identische Implementierung mit einem Container mit verknüpfter List-Tabelle. Möglicherweise stellen Sie fest, dass es überhaupt keine Codeänderungen gibt, mit Ausnahme von 1 Zeile in der Tabellenerstellung. Aus diesem Grund verkauft QLIBC die entsprechenden Funktionszeiger im Containerobjekt.
// 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);
Wir suchen Menschen, die zusammenarbeiten möchten, um QLIBC zu entwickeln und zu verbessern. Derzeit haben wir hohe Anforderungen an die folgenden Bereiche.
Die folgenden Personen haben bei Vorschlägen, Ideen, Code oder Fixierfehler geholfen: (in alphabetischer Reihenfolge nach Vorname)
Wenn wir Ihren Namen vergessen oder falsch geschrieben haben, lassen Sie es uns bitte wissen.