BREW vector
どうやら、vectorを使ってもあまり容量を増やさないように出来るみたいなので、vectorを実装してみようと思います。
とりあえず容量のことは考えずに、BREW用にimportしてみます。
- allocatorを消す。
- reverce_iteratorを(使わないだろうから)消す。
- allocatorが無いので、allocate, deallocate, Construct, Destroyを自分で実装。
- XUTILITYから持ってきている、copy, fill, copy_backward, swapを実装。
- あとはtypedefとかthrowとかを書き換えるだけ。
これはそんなに難しくないので、2,3時間あれば出来ます。
↓ソース
id:melpon:20000102
で、問題はここから。
このままだと、新しいvectorを宣言するたびに、かなりの容量を取ります。
えんらさん(id:enra)曰く、
# enra 『コンテナクラスって、型の中身を知る必要がある関数がほとんど無いので、privateでstatic関数でも作ってそこに委譲すればいいと思うですよ。』
# enra 『「型の中身を知る必要がある関数がほとんど無い」=「最低、型のサイズさえ分かればよい」』
ということらしいです。
自分はてっきり、全てのメソッドで、
void insert( iterator _P , size_type _M , const _Ty& _X ){ switch( sizeof( _Ty ) ){ case 1: vector_helper::insert_1( _P , _M , _X ); break; case 2: vector_helper::insert_2( _P , _M , _X ); break; case 4: vector_helper::insert_4( _P , _M , _X ); break; } }
こんな感じにするのかなぁとか思ってたのですが、実装する段階で自分のアホさ加減に気が付きました。
iterator自体がテンプレートなのにそれを渡してどうする(;´Д`)
どう見てもへたれプログラマです。本当にありがとう御座いました。