STLの注意点

vector array;
vector::iterator it = array.begin();
とした場合、アドレスは
int* p = it;
ではなく、
int* p = &*it;
のように書くそうだ。
イテレータは単純にポインタであったり、ポインタでない場合があったりといろいろだそうだ。
イテレータを利用して、メンバ関数を使用する場合、
(*it)->メンバ関数;
みたいに書く?


あとvectorはメモリ的に連続しているが、他は連続している保証はないとか。


push_backとかすると今までのメモリを破棄して、新しくメモリを確保する場合があるとか。
よって、要素を追加とかした場合は、イテレータやポインタを新しく設定しなおす必要がある。
また、新しくメモリを確保することから、メンバ変数としてポインタを持つ自作クラスを
listとかする場合にはコピーコンストラクタが必要となるとか。
というかメンバ変数にポインタを持つ自作クラスを作成する場合にはコピーコンストラクタを
作らないと危ない。