初期化時に要素の追加・変更を行い、そのあとに「もう変更しない」ことを明示できる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_builder
をimmutable_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
からムーブできます。