STLのvectorの実行速度を犠牲にしないで使う方法

 昔、vectorは遅い!という事をこのブログに記したが、実際push_back()を使って事前に確保した領域を拡張しない限り遅くないのでネタとして*1ここにメモしておくことにした。
 要するにvectorがPOD*2配列と張り合いたいのならばresize使って必要な領域を確保してoperator []でアクセスすること。そしてpush_back()は使うな!である。
http://ideone.com/cRo9i

//正しいvectorを使った配列の使い方
//resize後 配列と同じように・・・

#include <iostream>
#include <boost/scoped_array.hpp>
#include <vector>
using namespace std;

const int gSize = 100;

int main(){
 typedef vector<int> vt;
 typedef boost::scoped_array<int> sa;
 sa a(new int[gSize]);
 vt v;
 
 v.resize(gSize);
 
 for(int i=0;i<gSize;i++){
  a[i] = rand();
  v[i] = a[i];
 }
 
 return 0;
} 

*1:前にもやった覚えがあるがhttp://d.hatena.ne.jp/studiokingyo/20040916

*2:Plane Old Data : C言語でも使える型の事 int char double structなど