Kennt jemand C-Container-Bibliotheken? Ich bin auf der Suche nach etwas, das Standardimplementierungen von verknüpften Listen, Arrays, Hash-Tabellen usw. bietet, ähnlich wie die C ++ STL. Hauptanliegen sind:
- Client-Code sollte in der Lage sein, Container für mehrere verschiedene Datentypen zu erstellen, ohne die Bibliothek zu ändern.
- Die Oberfläche zum Erstellen und Verwenden der Container sollte intuitiv sein.
c
containers
Howard May
quelle
quelle
Sglib ist eine ausgezeichnete Bibliothek für generische Datenstrukturen. Die Bibliothek bietet derzeit eine generische Implementierung für:
Es ist sehr schnell. Schneller das Glib. Es ist von der Standardvorlagenbibliothek inspiriert. Hier herunterladen
Eine andere Lösung ist Attractive Chaos Sotware . C-
Makrobibliothek : kbtree.h: Effiziente B-Baum-Bibliothek in C.
khash.h: Schnelle und leichte Hash-Tabellenbibliothek in C.
kvec.h: Einfacher Vektorcontainer in C.
Kulesh Shanmugasundaram präsentiert die generische Linux Kernel Linked List und eine generische Hash-Tabelle, die auf der Linux Kernel Linked List basiert.
Sglib und Attractive Chaos Sotware sowie Linux Kernel Linked List sind C-Makrobibliotheken. Die Verwendung
void*
zum Implementieren generischer Container in C kann ineffizient sein. C-Makros ahmen C ++ - Vorlagen nach und sind so effizient wie eine C ++ - Vorlage.quelle
void *
verweisen wahrscheinlich auf den gesamten Adressraum Ihres Prozesses.Chuck Falconer hat eine anständige Hash-Bibliothek in C geschrieben, die eine C ++ - Schnittstelle enthält. Klicken Sie auf der Webseite auf hashlib.zip, um sie herunterzuladen.
Ben Pfaff hat eine sehr schöne und äußerst gut dokumentierte binäre und ausgeglichene Baumbibliothek , GNU libavl , die die meisten wichtigen Baumstrukturen implementiert, einschließlich binärer Suchbäume, AVL-Bäume, rot-schwarzer Bäume und Thread-Versionen von jedem.
libavl ist unter der LGPL (ab Version 2.0.3) lizenziert, hashlib ist GPL.
Ich bin mir nicht sicher, wonach Sie suchen, was Arrays und verknüpfte Listen betrifft, da erstere direkt von der Sprache unterstützt werden und letztere im Allgemeinen trivial genug sind, um ohne Garantie für eine Bibliothek implementiert zu werden.
quelle
Wie wäre es mit ccl? Dies ist eine Containerbibliothek für C. Vielleicht passt sie am besten zu Ihnen. Sie können https://code.google.com/p/ccl/ sehen . Genieß es.
quelle
Ich habe eine Bibliothek verwendet, die ich aus Hansons Buch "C Interface and Implementations" erweitert habe. Seine Quelle kann unter heruntergeladen werden
cii Buchwebsite
Alles ist ein abstrakter Datentyp. Es gibt Liste, Set, Tabelle (Karte).
quelle
#include "queue.h"
Zugriff auf die Implementierungen von einfach verknüpften Listen, einfach verknüpften Endwarteschlangen, Listen und Endwarteschlangen.Ich fand einen generischen Cache zum Speichern beliebiger Objekte im Speicher von DJ Bernstein ( http://cr.yp.to/djbdns.html ) sowohl sauber als auch einfach und superschnell. Suchen Sie in djdns tarball nach cache.h und cache.c.
quelle
Einige von denen, von denen ich gehört habe (aber nie benutzt habe), sind
quelle
Dies scheint die meisten Container und einige Algorithmen abzudecken. Es gibt auch keine Lizenzierung, alle Header enthalten - "Code kann ohne Einschränkung verwendet werden." http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=13867&lngWId=3
quelle