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