07/12/11 15:57:34
>>199
全体のデータサイズよりも、文字列の個数によって方法論が決まってくるんじゃないかな。
stringの実装には色んなやり方があるけど、いずれの場合も、サイズの大きな中身はポインタで持ってる。
だから、10MB使用している状態でvectorが要素を再配置したからといって、その10MBのすべてが
せっせと大移動を繰り広げるわけではない。
たとえばvector<string>の要素数が10で、それぞれのstringサイズが1MB、合計10MBのとき、
そのあとpush_back()で再配置が起きても、移動するのは「string型そのもの」だけ。
string型自体のサイズは、せいぜい数バイトから多くても20バイト台で、これが10個コピーされるだけってことになる。
でも、「平均10バイトの文字列が100万個で10MB」となると、これの再配置は確かにコストが高いわけで、
つまりこの辺は、君がイジろうとしているデータの性質次第で、アプローチが変わってくる部分だと思う。