STL

vectorとかmapへのアクセサが作りたくなったら

データの格納形式は様々なので,たとえ全ての実装クラスが持っているように思えても,
インタフェースクラスには書かないようにするのが吉。
実装の段で,各実装クラス毎に public で書けばよろし。

順序コンテナ

vector と deque の違い
push_front( val ) できるのが deque
vector, deque と list の違い
listだけランダムアクセスができない。
> vec[3] = 20;
> deq[2] = 10;
> list[4] = 5; ←こいつだけだめ!
list は連結リストなので,メモリが整列していない。
一方,配列の間に要素を追加削除するのは高速

vector

降順には専用の逆方向イテレーターを使う!!!
> vector<int>::reverse_iterator rit = vec.rbegin();
> for(; rit != vec.rend(); ++rit ){
> ...
> }
vec.end()は,何も指していない!
> vector<int>::iterator it = vec.end();
> cout << "vec.end() = " << *it << endl;
→ "vec.end() = 23ada9r93"
vectorのn番目の要素を削除する
> vec.erase( vec.begin() + n )
vectorの尻の要素にアクセスする
末端イテレータの1つ前を表示すれば良い。
> *( vec.end() - 1 )
一括初期化 その1
> vector<double> vec(10, 3.14);

一括初期化 その2
> vec.assign(10, 3.14);
確保だけ
> vec.reserve( 10 ); ← もともと10個以上確保していた場合は,何も起こらない。

map

keyが登録されているかどうか調べながら使う
> map<int, string> data;
> map<int, string>::iterator it;
> data[0] = "hoge";
> data[10] = "hage";
> it = data.find( 100 );   ←   it = data[100]; ではダメ!
> if( it != data.end() ){
>   (*it).second で値を参照できる。
> ...
最終更新:2010年05月10日 21:53
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。