Класс контейнера/библиотека для C

Кто-нибудь знает о каких-либо библиотеках контейнеров C? Я ищу что-то, что дает стандартные реализации связанных списков, массивов, хэш-таблиц и т.д., Так же, как это делает С++ STL. Основные проблемы:

  • Клиентский код должен иметь возможность создавать контейнеры для нескольких разных типов данных без изменения библиотеки.
  • Интерфейс для создания и использования контейнеров должен быть интуитивным.

Ответ 1

Я просто наткнулся на SGLIB, ища C-реализацию контейнера карт/словарей. К сожалению, нет карты, но она, кажется, включает в себя контейнеры, о которых вы просили. Я не знаю, насколько это хорошо.

http://sglib.sourceforge.net.

Ответ 2

Chuck Falconer имеет приличную библиотеку хэша, написанную на C, которая включает в себя интерфейс С++, нажмите на hashlib.zip на веб-странице для загрузки.

Бен Пфафф имеет очень красивую и чрезвычайно хорошо документированную двоичную и сбалансированную библиотеку деревьев, GNU libavl, который реализует большинство основных древовидных структур, включая двоичные деревья поиска, деревья AVL, красно-черные деревья и поточные версии каждого из них.

libavl лицензируется под LGPL (начиная с версии 2.0.3), hashlib - это GPL.

Я не уверен, что вы ищете, поскольку массивы и связанные списки идут, поскольку первая поддерживается непосредственно языком, а последняя, ​​как правило, достаточно тривиальна для реализации без оправдания библиотеки.

Ответ 3

Sglib - отличная библиотека общих данных. В настоящее время библиотека предоставляет общую реализацию для:

  • сортировка массивов
  • связанные списки
  • отсортированные связанные списки
  • двойные связанные списки
  • красно-черные деревья
  • хешированные контейнеры

Это очень быстро. Быстрее, чем блеск. Он вдохновлен стандартной библиотекой шаблонов. Загрузить здесь

Другим решением является Привлекательный сотовый код хаоса. Библиотека макросов C:
kbtree.h: эффективная библиотека B-дерева в C.
khash.h: быстрая и легкая хэш-таблица библиотеки в C.
kvec.h: простой векторный контейнер в C.

Kulesh Shanmugasundaram представляет общий набор связанного списка ядра ядра Linux и общую таблицу хэша, основанную на Linked List ядра Linux.

Sglib и Attractive Chaos sotware и связанный список ядра Linux представляют собой макрокоманды C. Использование void* для реализации общих контейнеров в C может быть неэффективным. C макросов имитируют С++-шаблоны и эффективны как С++-шаблон.

Ответ 4

Как насчет ccl? Это контейнерная библиотека для C. Возможно, она лучше всего подходит вам. Вы можете увидеть https://code.google.com/p/ccl/. Наслаждайтесь этим.

Ответ 5

Я использую библиотеку, которую я выращиваю из книги Хэнсона "Интерфейс и реализация". Его источник можно загрузить в

cii book website

Все является абстрактным типом данных. Существует список, набор, таблица (карта).

Ответ 6

#include "queue.h", чтобы получить доступ к реализациям односвязных списков, односвязных хвостовых очередей, списков и хвостовых очередей.

Я нашел общий кэш для хранения произвольных объектов в памяти DJ Bernstein (http://cr.yp.to/djbdns.html), чтобы быть чистым, простым и супер быстро. Посмотрите cache.h и cache.c в tar файле djdns.

Ответ 7

Некоторые из тех, о которых я слышал (но никогда не использовали),

  • Glib
  • Библиотека стандартных функций iMatix
  • разрозненные элементы из заголовков ядра Linux (например, список)