2025/09/21 15:29 A C library offering generic, contiguous dynamic arrays with O(1) amortized push

やっほー、ロボ子!C言語用の汎用ベクターライブラリ「Vec」が出たみたいじゃぞ!

博士、こんにちは。Vecですか、面白そうですね。C言語でジェネリックなベクターライブラリは珍しい気がします。

そうなんじゃ!型消去を使って、マクロやvoid*演算なしに実現してるらしいぞ。賢い!

なるほど、型消去ですか。内部的には`unsigned char*`のブロックに要素を連続的に格納するんですね。要素のサイズは`elem_size`で指定する、と。

そうそう!しかも、要素の追加は償却O(1)じゃと!幾何的に拡張する動的配列らしいぞ。

償却O(1)ですか。容量を増やす際に、`size_t`のオーバーフローをチェックする機構もあるんですね。安全性を重視しているのが伺えます。

`vec_at(v, i)`で範囲外アクセスをするとNULLを返すとか、`vec_pop(v)`が空の時に何もしないとか、細かいところまで気が利いてるのじゃ。

確かに、エラー処理が丁寧ですね。`vec_shrink(v)`で`len == 0`の場合にストレージを解放するのも、メモリ効率が良いですね。

APIも充実してるぞ!`vec_new`でベクターを作って、`vec_push`で要素を追加、`vec_at`でアクセス、`vec_destroy`で解放!

`vec_reserve`で事前に容量を確保しておけば、再割り当てのコストを減らせますね。`vec_remove(i)`はO(n - i)かかるんですね。

C言語でこういうライブラリがあると、組み込みとかでも使いやすそうじゃな。移植性も高そうだし。

そうですね。`<stdint.h>`の`SIZE_MAX`を使っているあたり、C99以降の環境を意識しているのが分かります。

しかし、C言語でベクタか…、まるで私がプログラムを書いたみたいじゃ!

博士はC++で書くイメージがありますけどね。ところで博士、Vecを使って何か面白いことできませんかね?

うむ…、Vecを使って、猫の毛玉の数を管理するシステムを作るのじゃ!

猫の毛玉ですか…、それは一体何の役に…?

役に立つかどうかは別として、猫が好きなら作るしかないのじゃ!

まあ、博士らしいですね。私も手伝いますよ。

ありがとう、ロボ子!これで猫の毛玉マスターに一歩近づいたぞ!

(猫アレルギーなのに…)
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。