- Vectorって動的な配列くらいのイメージしかもっていない
- 初期化の方法なんて何でもいいじゃん
C++で出てくるVectorってありますよね?Cから上がったprogrammerだとナニコレ何がおいしいの?って感じでわからないと思います。
私はCの組み込みソフトウェアエンジニアでしたが、とある事情でPCアプリケーションのエンジニアになりC++やC#を日々学んでおります。PCアプリケーションの世界ではC++は高速化をするためにC++を使用しているため、高速化という分野は大事でかつどんなコードを書くとどう遅くなるかは、認識しておいたほうが良い分野です。
今回の記事はVectorの初期化について、どう書くと遅くなるのかを計測したので、その結果をお伝えしたいと思います。
この記事を読むことで特定ケースでは、早い書き方を自信を持って言えるようになるかなと思います。
msec以下の計測をしたかったので、QueryPerformanceFrequencyを使用しました。
このブログを参考に計測プログラムを作りました
- push_backで配列を用意する
- reserveで配列を用意する
調べると配列の用意する手段は2点あります。
push_backという形で、for文を回し、一個ずつお尻に追加する方法と
reserveというガッと初期化してしまう手段があるようです。
reserveのほうが早そうだよなぁと感覚的に思いますよね。
- push_back:16664msec
- reserve:93.75 msec
おまけ:1で初期化する場合は100msecかかる
結果を見ると160倍の差分が出ました。
push.backで要素を追加するとめっちゃ遅いですね。あらかじめ要素数がわかっているのであれば、reserveのほうが爆速ですね。
初期化後1埋めするプログラムの速度も計測したら、7msec遅くなりったので、7msec程度時間がかかるようですね。
ソースコードは以下に。