web-dev-qa-db-fra.com

Classe de conteneur / bibliothèque pour C

Quelqu'un connaît-il des bibliothèques de conteneurs C? Je cherche quelque chose qui donne des implémentations standard de listes liées, de tableaux, de tables de hachage, etc., de la même manière que le STL C++. Les principales préoccupations sont les suivantes:

  1. Le code client doit pouvoir créer des conteneurs pour plusieurs types de données différents sans modifier la bibliothèque.
  2. L'interface de création et d'utilisation des conteneurs doit être intuitive.
76
Howard May

Je suis juste tombé sur SGLIB en cherchant une implémentation C d'un conteneur de carte/dictionnaire. Malheureusement, pas de carte, mais elle semble inclure les conteneurs que vous avez demandés. Je ne sais pas à quel point c'est bon.

http://sglib.sourceforge.net .

23
Nick Van Brunt

Sglib est une excellente bibliothèque générique de structures de données. La bibliothèque fournit actuellement une implémentation générique pour:

  • tableaux de tri
  • listes liées
  • listes liées triées
  • double listes chaînées
  • arbres rouge-noir
  • conteneurs hachés

C'est très rapide. Plus vite que ça. Il est inspiré de la bibliothèque de modèles standard. Téléchargez ici

Une autre solution est Attractive Chaos sotware . Bibliothèque de macros C:
kbtree.h: bibliothèque d'arborescence B efficace en C.
khash.h: bibliothèque de tables de hachage rapide et légère en C.
kvec.h: simple conteneur vectoriel en C.

Kulesh Shanmugasundaram présente la liste liée générique du noyau Linux et une table de hachage générique basée sur la liste liée du noyau Linux.

Les logiciels Sglib et Attractive Chaos et Linux Kernel Linked List sont des bibliothèques de macros C. En utilisant void* pour implémenter des conteneurs génériques en C peut être inefficace. Les macros C imitent les modèles C++ et sont aussi efficaces qu'un modèle C++.

10
Lear

Chuck Falconer possède une bibliothèque de hachage décente écrite en C qui comprend une interface C++, cliquez sur hashlib.Zip sur la page Web pour télécharger.

Ben Pfaff possède une bibliothèque d'arbres binaires et équilibrée très agréable et extrêmement bien documentée, GNU libavl , qui implémente la plupart des principales structures d'arbres, y compris les arbres de recherche binaires, les arbres AVL, rouge-noir arbres et versions filetées de chacun.

libavl est sous licence LGPL (à partir de la version 2.0.3), hashlib est GPL.

Je ne suis pas sûr de ce que vous recherchez en ce qui concerne les tableaux et les listes liées, car le premier est pris en charge directement par le langage et le second est généralement assez trivial pour être mis en œuvre sans garantir une bibliothèque.

10
Robert Gamble

Et ccl? Il s'agit d'une bibliothèque de conteneurs pour C. Peut-être qu'elle vous convient le mieux. Vous pouvez voir https://code.google.com/p/ccl/ . Profitez-en.

7
pwrlove

J'utilise une bibliothèque que j'ai développée à partir du livre "C Interface and Implementations" de Hanson. Sa source est téléchargeable sur

site du livre cii

Tout est un type de données abstrait. Il y a List, Set, Table (map).

5
navicore

Certains de ceux dont j'ai entendu parler (mais jamais utilisés) sont

  • Facile
  • bibliothèque de fonctions standard iMatix
  • éléments disparates des en-têtes du noyau Linux (par exemple liste)
2
Sandeep

Cela semble couvrir la plupart des conteneurs et certains algorithmes. Il n'y a pas non plus de licence, tous les en-têtes contiennent - "le code peut être utilisé sans restriction". http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=13867&lngWId=

2
MockM4XMacro

#include "queue.h" pour accéder aux implémentations des listes à liaison unique, des files d'attente de queue à liaison unique, des listes et des files d'attente de queue.

J'ai trouvé un cache générique pour stocker des objets arbitraires en mémoire par D. J. Bernstein ( http://cr.yp.to/djbdns.html ) à la fois propre, simple et super rapide. Recherchez cache.h et cache.c dans l'archive djdns.

2
user105991