Classe contenitore / Libreria per C [chiuso]
-
08-07-2019 - |
Domanda
Qualcuno conosce delle librerie del contenitore C? Sto cercando qualcosa che fornisca implementazioni standard di elenchi collegati, array, tabelle hash ecc., Proprio come fa il C ++ STL. Le preoccupazioni principali sono:
- Il codice client dovrebbe essere in grado di creare contenitori per più tipi di dati diversi senza modificare la libreria.
- L'interfaccia per la creazione e l'utilizzo dei contenitori dovrebbe essere intuitiva.
Soluzione
Mi sono appena imbattuto in SGLIB mentre cercavo un'implementazione in C di un contenitore di mappe / dizionari. Sfortunatamente, nessuna mappa ma sembra includere i contenitori di cui hai chiesto. Non ho idea di quanto sia bello.
Altri suggerimenti
Chuck Falconer ha una libreria di hash decente scritta in C che include un'interfaccia C ++, fare clic su su hashlib.zip sulla pagina Web da scaricare.
Ben Pfaff ha una libreria di alberi binari ed equilibrata molto bella ed estremamente ben documentata, GNU libavl , che implementa la maggior parte delle strutture ad albero principali tra cui alberi di ricerca binaria, alberi AVL, alberi rosso-neri e versioni thread di ciascuno.
libavl è concesso in licenza sotto LGPL (dalla versione 2.0.3), hashlib è GPL.
Non sono sicuro di ciò che stai cercando per quanto riguarda gli array e gli elenchi collegati poiché il primo è supportato direttamente dalla lingua e il secondo è generalmente abbastanza banale da implementare senza giustificare una libreria.
Sglib è un'eccellente libreria di strutture di dati generici. La libreria attualmente fornisce un'implementazione generica per:
- matrici di ordinamento
- elenchi collegati
- elenchi collegati ordinati
- liste doppie collegate
- alberi rosso-neri
- contenitori con hash
È molto veloce. Più veloce che glib. È ispirato alla libreria dei modelli standard. Scarica qui
Un'altra soluzione è Sotware caos attraente . Libreria di macro C.:
kbtree.h: efficiente libreria B-tree in C.
khash.h: libreria di tabelle hash veloci e leggere in C.
kvec.h: semplice contenitore vettoriale in C.
Kulesh Shanmugasundaram presenta l'elenco generico del kernel Linux e una tabella hash generica basata su Linux Elenco collegato al kernel.
Il sotware Sglib e Attractive Chaos e Linux Kernel Linked List sono librerie di macro C. L'uso di void *
per implementare contenitori generici in C potrebbe essere inefficiente. Le macro C imitano i modelli C ++ e sono efficienti come un modello C ++.
Che ne dici di ccl? Questa è una libreria di contenitori per C. Forse è la soluzione migliore per te. Puoi vedere https://code.google.com/p/ccl/ . Divertiti.
Sto usando una libreria che sto crescendo dall'interfaccia e dalle implementazioni di Hanson & C; libro. La sua fonte è scaricabile all'indirizzo
Tutto è un tipo di dati astratto. C'è Elenco, Set, Tabella (mappa).
#include " queue.h "
per accedere alle implementazioni di elenchi collegati singolarmente, code di coda collegate singolarmente, elenchi e code di coda.
Ho trovato una cache generica per la memorizzazione di oggetti arbitrari in memoria di DJ Bernstein ( http: // cr. yp.to/djbdns.html ) per essere pulito, semplice e super veloce. Cerca cache.h e cache.c in tarball djdns.
Alcuni di quelli di cui ho sentito parlare (ma che non ho mai usato) sono
- Glib
- Libreria funzioni standard iMatix
- elementi diversi dalle intestazioni del kernel Linux (ad es. elenco)
Questo sembra coprire la maggior parte dei contenitori e alcuni algoritmi. Inoltre non esiste alcuna licenza, tutte le intestazioni contengono: "il codice può essere utilizzato senza restrizioni". http: //www.planet-source-code .com / vb / scripts / ShowCode.asp txtCodeId = 13867 & amp;? lngWId = 3