読者です 読者をやめる 読者になる 読者になる

フリーストアを使わない可変長配列

C++

static_vector using aligned_storage
static_vector: fixed capacity vector update
ソースコードhttp://svn.boost.org/svn/boost/sandbox/varray/


現在、BoostのSandbox上で、フリーストア(ヒープ)を使わない可変長配列の開発が進められています。
このコンテナは、テンプレートパラメータで決定した容量に基いて、静的なサイズの配列を内部的に持ち、その配列に対して配置newすることで可変長配列を実現します。


使い方は以下のようになります。

#include <iostream>
#include <boost/container/varray.hpp>

int main()
{
    // intの可変長配列を定義。最大要素数は3
    boost::container::varray<int, 3> v; // size: 0

    // 末尾に要素を追加
    v.push_back(1);     // size: 1
    v.push_back(2);     // size: 2
    v.push_back(3);     // size: 3

//  v.push_back(3);     // 最大容量をオーバーしたので、assertもしくは未定義の振る舞い

    // 末尾要素を削除
    v.pop_back();       // size: 2

    for (int& x : v) {
        std::cout << x << std::endl;
    }
}
1
2

最大容量を最初に決めて、それを超えないように追加&削除操作を行います。
このクラスは、テンプレートパラメータを除いて、std::vectorと同じインタフェースを持っています。