C Runtimeを使用した、STLのvectorもどき

C++処理系で必ず付属しているStandard Template Library(STL)は使い方がわかれば、かなり使えるライブラリです。特に動的な配列を実現する vectorは一番使うのではないのでしょうか? C/C++のメモリ管理は結構面倒ですからこのようなライブラリをどんどん使うことでバグをなくす事が出来ます。
しかし、vectorの中身を見ると何だか冗長な処理が多く、メモリを結構食っている感じを受けるので、自分で同じようなものを作ってみました。
ヘッダファイルは1つだけで、C言語のランタイムライブラリを使用しているので、C言語プログラマがC++言語の習得の助けにもなると思います。少なくとも、本物のSTLよりソースコードが少なく、分かり易い事は間違いありません。そしてC++のテンプレート機能が如何に強力かと言う事を思い知るでしょう。
STLの入門としても使用できるかもしれません。

また、vectorの使い方を知っている方々にも基本的な使い方や関数はほぼ同じなので違和感なく使用で来ます。もし気に入らない部分があったら、自由に書き換えて使ってください。このソフトはフリーソフトウェアで、変更して勝手に使用しても全く構いません。また、このライブラリで生じた損害について作者は責任を負いません。デバッガですべて分かりますので自分で追跡してください。一応VisualC++5.0,Borland C++5.5で動作確認しています。

具体的なリファレンスはここをクリック。

ベクターもどきを使用したハッシュデータクラスのリファレンスはここをクリック。


主な特徴

realloc()を使用しているので、メモリ割り当てが効率的である(はず)。
本物のSTLではnew演算子でやっているので、メモリサイズを拡張する時、一時的にメモリサイズが
割り当てサイズより遥かに増える。 (これはC++の言語仕様を改善して欲しいと思うのだが)
特にVisualC++ではmalloc系の関数は最適化されていると聞くから、更に効能があるかも?
気に入らない人はWindowsではWin32のHeapAlloc(),HeapRealloc()を使用してください。
VisualC++のrealloc()は結局これらの関数を呼び出していますが。
Ver1.03からWindows環境下ではWin32APIのHeapAlloc()を直接呼び出せるコンパイルオプションを追加しました。これにより、高速かつコンパクトなコードが出力されます。


メモリの拡張はSTLのように現在のサイズから2倍、4倍、8倍..と増えない。
vectorもどきはユーザが指定したサイズ分だけ拡張するようにしてあるので、
いつのまにか多くのサイズを割り当てていることが少ない。
気に入らない人はSTLのように拡張できるコンパイルオプションがある。

STLでいうclear()は動的な配列をすべて解放しない
そこでvectorもどきはすべて解放するようにした。
ただし、オリジナルのclear()と同じ動作を行うreset()も実装した。

MFC(Microsoft Foundation Class Library)と一緒に使用しても問題ない。
私が知っている限りMFCアプリケーションではSTLは使用できない。
2001 8/26 std::vector<int> a;という宣言にすればOKだということがわかりました。訂正します。
ソースファイルにusing namespace std;という宣言をやるとうまくいかないのです。


キャラクタ型の配列をサポートするためのs_vectorを同梱している。
これはMFCでいうCStringやSTLでいうstringと同様のものを実現するために用意されている。
必要と思われる部分しか実装されていないのでソースコードが少ない。
したがって、関数の追加も簡単だと思われる。

実行コードが小さい。
ちなみに、私のシェアウェアはvectorもどきに代えただけで、3kバイト減りました。
STLはいろんな機能を積めこんでいるから当然なんですが..

STLのfunctionヘッダに実装している機能と一緒に使用しても問題ない(と思う)
多分普通の配列変数でも問題ないので、大丈夫なはずである。

ダウンロードはこのページから