reserve + push_back

std::vector v;
v.reserve(sz);
for(int i = 0; i < sz; ++i){
  v.push_back(data[i]);
}

通常,for文による明示的なループによる代入とmemcpyとの比較では圧倒的に後者に軍配が上がります.これはmemcpyが実装上の最適化を許されているからです.(確かCに関する本でこのmemcpyに関して論じていたものがあってそれを読んだ覚えがあるのですがタイトルを失念してしまいました.)上のコードではreserveによってあらかじめ内部バッファを伸張しておき,push_backを使用することでvector内部のバッファの再配置(とそれに伴うdelete & new,要素のコピー)を避けています.が,これは結局のところ1要素ずつの明示的な代入に過ぎず,memcpyと比較して圧倒的に遅いであろうことは想像に難くないです.