なんかワタシのstd::vectorのお話についてイロイロと考察があるようで・・・。

d:id:studiokingyo:20040719についてですね。
ありがたい限りです。m(_ _)m
こんなにトラックバックがついたのは初めてかな?
さてさて、早速、返信を。

d:id:shibacho:20040719#p2
より。

ワタシもstd::vectorは遅いとは思わない。優秀な方のコンテナだと思う。
d:id:studiokingyo:20040719#p1
で挙げた、C言語でも使える型(POD)*1では使いにくいという事だけだ。
いちいちfor使ってpush_backはちょっとなぁ〜遅いナァ〜と不満を漏らした^^;それだけ。
あと、強いて言ったら、eraseしたらすぐに詰めちゃうところ・・・、
eraseしても明示的に指定しないと詰めないvectorがあればナァ、もちろんiterate時にはfilterかましてくれる奴

vectorの挿入操作は注意」「vectorの参照はOK」と分かって使っていればいいと思うのです。

と、あるように、id:sshibacho氏もそこがポイントだよ^^との事。

しかし、あまりSTLを知らない人に対して「std::vectorは遅い」と一緒くたに言っちゃうことは危険だと思うのです。

そうです。私もそう思います。たまたま、push_backする量が多いときは遅いんですよ〜。なのです。
それから、イテレーションするのに、std::listの方、mapの方が速いとか言うのはちょっとなぁ〜。と思っちゃいます。
よほど特殊な環境?

d:id:Cryolite:20040716
d:id:Cryolite:20040717
二日に渡り、std::vectorを検証してくださいました。m(_ _)m

std::vectorをテンポラリバッファとして使う。
との事についての速度計測。

resizeは空きメモリ確保ではなく、確保して使用する関数だったんですね (´Д⊂グスン(御指摘があるまで間違えていました。


ところで、やはりVC.NET環境なのでしょうか?
PODとnon-PODをコンパイル時に分ける処理?
template<>を使ってどうにかと暗示されているようなされていないような・・・。
特殊化・・・、うちのコンパイラではちょっと勘弁願いますです。
なので、私が書くソースコードに特殊化と言うのはありません。^^;;
さらに、汎用アルゴリズム系のロジック*2は互換性を上げる為に、最近ほとんどC言語を使っています。*3
DでもJavaでも使えるとか聞いたことありますし・・・。

d:id:Cryolite:20040717#p8

という事で、テンポラリバッファとして使う場合、push_backとかいうものを使わなければ、普通の動的バッファと変わらないパフォーマンスのようです。
あ、VC++7.1のSTLクソだったんですか・・・VC6のはすでにバグッちゃってますけど・・・。
ムー、やっぱりSTLPortですか〜。今後も私はSTLPort派のようです。

でも、詰め込んだサイズをクラス内に保存しないのは精神衛生上悪いので・・・、
やっぱり、自作クラス・・・しか道は残されていないようで・・・。私の場合は・・・。




最近、私が使っているタイマークラスは
http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/dkingyoutility/dkutil/dkutilTimer.h?rev=1.4&content-type=text/vnd.viewcvs-markup
ranking_timerというクラスです。

std::vectorについて実験、検証してくださったid:Cryplite氏に感謝します。
m(_ _)m

*1:id:Cryolite氏の日記にて思い出しました。

*2:SHA系とかRijndael系とか

*3:あ〜退廃的・・・?