web-dev-qa-db-ja.com

Cのコンテナクラス/ライブラリ

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

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

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

http://sglib.sourceforge.net

23
Nick Van Brunt

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

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

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

別の解決策は、 魅力的なカオスソフトウェア です。 Cマクロライブラリ:
kbtree.h:Cの効率的なBツリーライブラリ.
khash.h:Cの高速で軽量なハッシュテーブルライブラリ.
kvec.h:Cの単純なベクトルコンテナー.

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

Sglibと魅力的なカオスソフトウェアとLinuxカーネルリンクリストは、Cマクロライブラリです。 void*を使用してCで汎用コンテナを実装するのは効率が悪い場合があります。 CマクロはC++テンプレートを模倣し、C++テンプレートと同じくらい効率的です。

10
Lear

チャックファルコナー には、C++インターフェイスを含むCで記述された適切なハッシュライブラリがあります。ダウンロードするには、Webページのhashlib.Zipをクリックしてください。

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

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

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

10
Robert Gamble

Cclはどうですか?これはCのコンテナライブラリです。おそらく最適でしょう。 https://code.google.com/p/ccl/ を確認できます。楽しめ。

7
pwrlove

Hansonの「C Interface and Implementations」の本から成長しているライブラリを使用しています。彼のソースは、でダウンロード可能です

cii book website

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

5
navicore

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

  • グリブ
  • iMatix標準関数ライブラリ
  • linuxカーネルヘッダーからの異なる要素(例:リスト)
2
Sandeep

これは、ほとんどのコンテナといくつかのアルゴリズムをカバーしているようです。また、ライセンスはありません。すべてのヘッダーに含まれる-「コードは制限なく使用できます。」 http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=13867&lngWId=

2
MockM4XMacro

#include "queue.h"単一リンクリスト、単一リンクテールキュー、リスト、テールキューの実装へのアクセスを取得します。

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

2
user105991