Что представляет собой чистая альтернатива контейнерам STL на C?

Возможный дубликат:
Класс / библиотека контейнера для C

Одна из основных причин использовать C ++ вместо C - это чрезвычайно удобные контейнеры, которые предоставляет STL. Однако, если я хочу написать свой код на чистом C и не писать все свои контейнеры с нуля, какая у меня есть альтернатива?

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

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

Мы будем очень признательны за любые мнения и / или опыт работы с контейнерами на чистом C (Ansi или иначе).


person Sandeep    schedule 20.05.2011    source источник
comment
Настоящий вопрос в том, почему вы хотите писать на C? На самом деле невозможно создать надежные библиотеки контейнеров на C, а компиляторы C ++ доступны для всех платформ, кроме самых маленьких, так почему бы не использовать C ++?   -  person    schedule 20.05.2011
comment
спасибо за троллей. Но я должен взять на себя часть вины - мне нужно было просто спросить о контейнерах в C и оставить все как есть.   -  person Sandeep    schedule 22.05.2011


Ответы (2)


Я бы рекомендовал GLib исключительно потому, что у него хороший набор функций, и он относительно зрелый, стабильный, переносимый и широко используемый.

person kqnr    schedule 20.05.2011

Вы или разработчик библиотеки можете писать контейнеры и т. Д. Каждый раз, когда вы хотите использовать их для другого типа, возможно, помещая определения в гигантские макросы, или вы можете использовать void * для контейнеров, теряя всякую надежду на безопасность типов, а иногда и некоторую производительность. (Функция qsort в C может быть значительно менее эффективной, чем шаблон sort в C ++.) Невозможно получить эквивалент контейнеров, итераторов и алгоритмов C ++ в C.

Я мало что знаю о Glib, и ваша ссылка на разрозненные элементы заголовков ядра Linux немного расплывчата. Список Linux, который вы упомянули, вероятно, типичен для того, что вы получите: отсутствие безопасности типов и набор хорошо написанных функций, которые будут называться по-разному для каждого типа данных. Беглый взгляд на iMatix не выявил контейнеров.

person David Thornley    schedule 20.05.2011
comment
О чем ты говоришь? если вы не знаете Glib, почему вы отвечаете? Компилятор C ++ написан на C, и вы утверждаете, что в C нет возможности использовать контейнеры C ++ и т. Д.? единственная разница - это синтаксис, иначе у вас может быть все на C, все ОС Unix, BSD, Linux и т. д. написаны на C - person kay; 22.05.2011
comment
@kay: Вопрос о том, что вы можете написать на C, не имеет отношения к вопросу о том, какие языковые конструкции вы можете построить на C. Если вы имеете в виду, что вы можете написать компилятор для другого языка на C и использовать его вместо этого, вы упускает из виду суть. - person David Thornley; 23.05.2011