002: publicな型とメンバ変数

前回クラスの定義を行いました。今回はpublicな型とメンバ変数の定義を行います。

template <typename T>
class myvector
{
public:
    using value_type = T;
    using size_type = size_t;
    using difference_type = ptrdiff_t;
    using reference = value_type&;
    using const_reference = const value_type&;
    using pointer = value_type*;
    using const_pointer = const value_type*;
    using iterator = value_type*;
    using const_iterator = const value_type*;
    using reverse_iterator = std::reverse_iterator<iterator>;
    using const_reverse_iterator = std::reverse_iterator<const_iterator>;

private:
    pointer heap_ = nullptr;
    size_type size_ = 0;
    size_type capacity_ = 0;
};
上側で11個の public な型定義を行っています。STLコンテナには様々な型を public 定義しておくことが要求されおり、それに従ったものになります。
この中で重要なのは、iterator の定義です。myvector では要素の型のポインタを iterator として定義しています。iterator のコンセプトはかなり巨大で複雑ではあるのですが、myvector は要素を連続メモリ領域に保持するので、通常のポインタが iterator としての役割を果たすことができます。
また、std::reverse_iterator<> という標準テンプレートクラスを使用することで、iterator から reverse_iterator を作成することができます。

下側はメンバ変数と定義となります。当然全て private変数です。
std::vector および std::string の定義には、3つのメンバ変数が必要であることが知られています。myvector では、ヒープ先を指す heap_、現サイズを格納する size_、ヒープの確保サイズを格納する capacity_、の3つをメンバ変数としています。
今後作成する関数にて、heap_ は data() 又は begin()、size_ は size()、capacity_ は capacity() でそれぞれ取得できるようになります。


全ソースコード: https://github.com/suomesta/myvector/tree/master/002

0 件のコメント:

コメントを投稿