読者です 読者をやめる 読者になる 読者になる

std::vectorはそんなにダメか?

いま、メインでstd::vectorを使っているんですけれども、
vectorってclearでメモリが解放されないんですよ!!!!」
という話を聴いた。
「シーンを遷移したらメモリの使用量が増えていたのでメモリリークしていると思ったらvectorがpush_backでメモリを再確保してましたよ!!」
という話を聴いた。
vectorってiteratorを回している間にpush_backするとiteratorが壊れるんですよ」
という話を聴いた。


vectorはダメだろうか?
そもそも、自分はvectorより優れた実装の「可変長配列」を書けるプログラマがそんなにいるとは思っていない。
vectorの実装は概ね納得できるし、
clearでメモリが解放されないときはswapすれば良いと知っているし、
push_backでメモリを確保されたくなければreserveすれば良いし、
iteratorを走査中に要素を追加すればぶっ壊れる可能性があるのは自明だ。

わかりきっていれば「そういうものだ」という実装も、
わからない人にとっては不可思議な動作となる。

少なくとも自分には、
clearでメモリを解放されたら非効率だし、
reserveしないでpush_backは非効率だし、
iteratorを触っているのにpush_backは恐るべき行為だ。

うーん。
要するにアレだ。
「知っていないと使えない事が多すぎる」

うん。
そうだそうだ、C++STLはBoostは知っていないと使えない事が多すぎる。
だからといって、
これが正義と学習コストを持ち上げて
「そんなの勉強しませんよ」
なんて言ってしまうのはどうかと思うわけで、
解らないなら知ろうとすればいいんじゃないですかねえ。