immutable_vectorを作った

初期化時に要素の追加・変更を行い、そのあとに「もう変更しない」ことを明示できるvectorを作りました。ムーブがあるので簡単に作れた。

例:

#include <iostream>
#include <shand/immutable_vector.hpp>

int main()
{
    // 要素の追加・変更
    shand::vector_builder<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);

    // もう変更しない
    shand::immutable_vector<int> iv(std::move(v));

    for (int x : iv) {
        std::cout << x << std::endl;
    }
}

使い方としては、以下のようになります。

  • vector_builderを使い、要素の追加・変更をする。
    • これはただのstd::vectorの別名。
  • 追加・変更が終わったら、vector_builderimmutable_vectorにムーブする。
    • immutable_vectorは、mutableなインタフェースを持たないだけのstd::vectorのラッパー。

これらのクラスは、以下のように、ローカル変数でvector_builder、メンバ変数でimmutable_vectorを持つような状況を想定しています。

class X {
    shand::immutable_vector<T> data_;
public:
    void setupData()
    {
        shand::vector_builder<T> builder;
        …
        data_.build(std::move(builder));
    }
};

immutable_vectorコンストラクタのほかに、build()メンバ関数vector_builderからムーブできます。