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

Boost.Container static_vector

C++

Boost 1.54.0からBoost.Containerに、static_vectorというコンテナが追加されました。
これは、以前このブログの「フリーストアを使わない可変長配列」というエントリで紹介したものです。

このコンテナは、std::vectorstd::array両方の特性を持つハイブリッドなコンテナとして設計されています。一言で表現するなら、静的な領域を使用する可変長配列です。
固定のキャパシティを第2テンプレート引数で指定すると、そのサイズが静的に領域確保されます(つまりスタック上に確保される)。あとは、そのキャパシティを超えないように要素を追加/削除していきます。

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

int main()
{
    boost::container::static_vector<int, 3> v;

    // 要素の追加
    v.push_back(3);
    v.push_back(1);
    v.push_back(4);

    // 全要素を出力
    for (int x : v) {
        std::cout << x << std::endl;
    }

    // キャパシティを超えて要素追加しようとすると、bad_alloc例外が投げられる
// v.push_back(5);
}
3
1
4

このコンテナは、std::vectorと同じく、以下のような特徴を持ちます:

  • ランダムアクセス可能
  • 末尾への挿入/削除は定数時間
  • 先頭や真ん中への挿入/削除は線形時間

アロケータを持っていない点を除いて、std::vectorと同じように使用できます。


参照:
static_vector - Boost Container Library
static_vector Reference - Boost Container Library