std::vectorのスピードとか・・・。

d:id:Cryolite:20040714#p3
より。std::vectorについてだ。
私はstd::vectorは結構、優秀な方のコンテナだと思うし、*1使うときには使う。

しかしだ・・・。あれだ!std::vector
C言語でも使える型*2にははっきり言って使えないのだ。
例えば、unsigned char型をpush_backしていたら普通の動的確保+memcpyの100倍かかっちゃた。って事もある。*3
一応、std::vectorの使い方にも裏技もある。
http://www.s34.co.jp/cpptechdoc/article/vectorastemp/
しかしだ、この裏技を使うと、size()が書き込んだ値を返してくれないのだ。*4
やっぱり、テンポラリバッファとしての利用が前提のようだ。

個人的にはやっぱりそのページでも紹介されているようにscoped_arrayを使った方が幸せかと・・・。

という事でこのジレンマをどうにかすべく、車輪の再発明をしたのが、byte_buffer*5 と scoped_buffer だ。
http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/dkingyoutility/dkutil/dkutilBuffer.h
scoped_array に size()とかresize()を付加したものだ。

このクラスは一番 使用頻度が高い。
私のC++ソースコードの中にこのscoped_bufferが登場しないソースはかなり珍しい。
それくらい、今は重宝している。

*1:と、イイマスカ、STLに優秀じゃないコンテナは無いね^^;場面によってはまったく使えないものもあるけど・・・

*2:プレーンなんたらかんたら型 スマン、調べなおす

*3:実際計った。http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/dkingyoutility/dkutil/dkutil_test/tested.cpp?rev=1.12&content-type=text/vnd.viewcvs-markup void Test_VectorSpeed()って奴

*4:まぁ、言われて見れば当たり前だが・・・

*5:未完成