79

Cコンテナライブラリを知っている人はいますか? C++ STL とほぼ同じ方法で、リンクされたリスト、配列、ハッシュ テーブルなどの標準的な実装を提供するものを探しています。主な懸念事項は次のとおりです。

  1. クライアント コードは、ライブラリを変更することなく、複数の異なるデータ型のコンテナーを作成できる必要があります。
  2. コンテナーを作成して使用するためのインターフェースは直感的でなければなりません。
4

8 に答える 8

26

マップ/辞書コンテナーの C 実装を探しているときに、SGLIB に出会いました。残念ながら、地図はありませんが、あなたが尋ねたコンテナが含まれているようです. 私はそれがどれほど良いかわかりません。

http://sglib.sourceforge.net

于 2008-11-20T19:03:15.333 に答える
11

Sglibは優れた汎用データ構造ライブラリです。ライブラリは現在、次の一般的な実装を提供しています。

  • 配列の並べ替え
  • リンクされたリスト
  • 並べ替えられた連結リスト
  • 二重連結リスト
  • 赤黒の木
  • ハッシュされたコンテナ

とても速いです。そのグリブを高速化します。これは、標準テンプレート ライブラリに触発されています。ここからダウンロード

もう 1 つのソリューションはAttractive Chaos ソフトウェアです。C マクロ ライブラリ:
kbtree.h: C の効率的な B ツリー ライブラリ。
khash.h: C の高速で軽量なハッシュ テーブル ライブラリ。
kvec.h: C の単純なベクトル コンテナー。

Kulesh Shanmugasundaramは、一般的な Linux カーネル リンク リストと、Linux カーネル リンク リストに基づく一般的なハッシュ テーブルを提示します。

Sglib および Attractive Chaos ソフトウェアと Linux Kernel Linked List は、C マクロ ライブラリです。を使用void*して C でジェネリック コンテナーを実装すると、非効率になる場合があります。C マクロは C++ テンプレートを模倣し、C++ テンプレートと同じくらい効率的です。

于 2009-05-24T02:46:51.317 に答える
10

Chuck Falconerは、C++ インターフェイスを含む C で書かれたまともなハッシュ ライブラリを持っています。ダウンロードするには、Web ページの hashlib.zip をクリックしてください。

Ben Pfaffは、バイナリ検索ツリー、AVL ツリー、赤黒ツリー、およびそれぞれのスレッド化されたバージョンを含むほとんどの主要なツリー構造を実装する、非常に優れた、非常によく文書化されたバイナリおよびバランスのとれたツリー ライブラリGNU libavlを持っています。

libavl は LGPL (バージョン 2.0.3 以降) の下でライセンスされており、hashlib は GPL です。

前者は言語によって直接サポートされており、後者は一般にライブラリを保証することなく実装するのに十分簡単であるため、配列とリンクリストに関する限り、あなたが何を探しているのかわかりません。

于 2008-11-20T15:45:10.833 に答える
7

cclはどうですか?これは C 用のコンテナー ライブラリです。https://code.google.com/p/ccl/が表示されます。楽しめ。

于 2013-05-06T02:05:41.273 に答える
5

私は、Hanson の「C Interface and Implementations」の本から拡張してきたライブラリを使用してきました。彼のソースは次の場所でダウンロードできます。

cii本のウェブサイト

すべてが抽象データ型です。リスト、セット、テーブル(マップ)があります。

于 2008-11-22T16:04:09.983 に答える
2

#include "queue.h"単一リンクリスト、単一リンクテールキュー、リスト、およびテールキューの実装にアクセスするため。

DJ Bernstein(http://cr.yp.to/djbdns.html)がメモリに任意のオブジェクトを格納するための汎用キャッシュは、クリーンでシンプルかつ超高速であることがわかりました。djdnstarballでcache.hとcache.cを検索します。

于 2009-05-24T02:19:37.907 に答える
2

私が聞いたことがある(しかし使用したことのない)もののいくつかは

  • ギブ
  • iMatix 標準関数ライブラリ
  • Linux カーネル ヘッダーからの異なる要素 (例: リスト)
于 2011-05-22T04:55:15.007 に答える