悩めるSEの雑記です

日々思いつくがままです

vectorコンテナクラスを実装してみる

std::vectorのインタフェースを見ながら、自分でもミニチュアで実装してみた。

 

コンストラクタ、デストラクタ、at()、push_back()、pop_back()、operator、主なところですね。のっけからテンプレートクラスの書き方で躓きました。cppファイルに分割すると、型を具体的にしないと駄目なんですね・・・C++、思い出すのに時間がかかりそうです。何かとタイプ数が多いし・・・

 

std::vectorの実装も少し除きつつ、動作確認用サンプルで比較しながら進めました。気がついたのは、std::vectorで定義された変数は、Visua Studioのローカル変数ウィンドウでは配列のようにみえることです。自分もoperatorを定義してみたのですが同じようには見えませんでした。

 

更にいうとstd版はメンバー変数が全く見えません。これは一体どういうことなんでしょうか。かなり複雑なクラス構成に見えます。vector自体が値テンプレートクラスを継承しています。この辺りが肝な気もしますが、よくわかりません。不要なものは極力隠蔽する、そういうポリシーなんだと思いますが、徹底していますね。

 

次は簡単なiteratorを作ってみようかな。