vector
- push_backで登録する変数はヒープ領域に確保される。vector変数の解放で、登録された変数もヒープ領域から解放される。
- vectorは、デストラクタが呼び出されると、メモリの解放が行われる。スコープを抜ける時、解体の直前で自動的に呼び出される。スコープの中の処理中に要素を削除しても、内部の領域が縮小する事はないが、swap技法を使えば、強制的に領域を切り詰めることは可能。std::vector<int>().swap(v);
- データが大きめのクラスをvectorに格納する場合、インスタンスをvectorに格納していくと、メモリを確保しなおす場合や、push_backの際にコピーするのに時間がかかっていまう。そこで、インスタンスではなくpointerをvectorに格納しておく方法が良いが、vectorが解放される前に登録したオブジェクトを解放する必要がある。emplace_backを使用することで改善できが、C++11からの機能。
- イテレータは容易に無効化されます。要素の追加はreserveしていなかった場合にイテレータが壊れる可能性があります。なので、基本的に追加した場合にイテレータが壊れると考えた方が安全です。
- 要素の追加の際のコンストラクトコストを考えるとemplace_backを使うべきです。
- NRVOとかmove semanticsがあるので、現代のまともなコンパイラでは参照やポインタを経由せずに返してもコストがありません。move semanticsはC++11から。