vectorを使おう! 〜脱 new hoge[N] 〜

C++で動的に配列を確保するときは、通常

hoge* foo = new hoge[N];

とするように習うと思う。そして確保したメモリを解放するには

delete [] foo;

するように習うとおもう。
しかし、ここで僕はvectorを使うことを推奨しようとおもう。その理由は

  • 通常の動的確保配列として使える
    • パフォーマンスは変わらない
  • deleteをしなくて良い
    • コードが書きやすい

vectorを使いたいときはまずヘッダをインクルードする

#include <vector>

その上で、配列確保はこうする

vector<hoge> foo(N);
// あるいは
vector<hoge> fuga = vector<hoge>(N);

では、ポインタとして使いたい場合はどうするか

// 一番最初のアドレス
hoge* foo_begin = foo.begin().base();
// 最後+1のアドレス
hoge* foo_end = foo.end().base();
// 任意の位置の要素
hoge& foo_i = foo[i];

他にもdequeとかlistとかあるので、使ってあげてくださいね。(listは要素を削除する時ぐらいしかパフォーマンス上有利でないので気をつけること)