Boost::array紹介


本稿では,c++で静的配列をサポートするコンテナ:boost.を紹介する.array.
boost.arrayは次世代の標準ライブラリに現れる可能性が高い.
 
1.なぜ一定の大きさの配列の容器が必要なのか
まず、固定サイズの配列はよく見られますが、stlはvectorを提供していますが、vectorは動的に成長可能な配列として静的配列より少しオーバーヘッドが多く、一部の人から見れば耐えられません.c++には固定サイズの容量の配列容器も必要で、もちろん、性能は普通の配列に匹敵する.
    boost.arrayはこの需要に応じて生まれた.
 
   boost.arrayは、ほとんどのがすべてではない「可逆容器(reversable container)」のニーズを実現した.ArrayがSTL可逆容器ではない理由は:
  • は構造関数を提供していません.
  • 要素には、不確定な初期値がある可能性があります.
  • swap()は定数複雑度を有しない.
  • size()は、2番目のテンプレートパラメータのタイプに基づいて、常に一定である.
  • コンテナには、ディスペンサのサポートはありません.

  • 「シーケンス」を実装する必要はありません(C++規格の23.1.1、[lib.sequence.reqmts]を参照).ただし、以下を除きます.
  • は、front()およびback()を提供する.
  • は、operator[]およびat()を提供する.

  • 2.ヘッダー・ファイルと関連メンバー関数の宣言:
    Reference
    Header array公有の構造/コピー/プロファイル
  • template<typename U> array& operator=(const array<U, N>& other);


  • Class template array(クラステンプレートarray)
    array反復サポート
  • iterator begin();
    const_iterator begin() const;

    戻り値:
    最初の要素にある反復器
    放出:
    異常を投げ出さない
  • iterator end();
    const_iterator end() const;

    戻り値:
    最後の要素の後にある反復器
    放出:
    異常を投げ出さない
  • arrayリバース反復サポート
  • reverse_iterator rbegin();
    const_reverse_iterator rbegin() const;

    戻り値:
    逆反復の最初の要素にある逆反復器
  • reverse_iterator rend();
    const_reverse_iterator rend() const;

    戻り値:
    逆反復の最後の要素の後にある逆反復器
  • array容量
  • size_type size();

    戻り値:N
  • bool empty();

    戻り値:N==0
    放出:
    異常を投げ出さない
  • size_type max_size();

    戻り値:N
    放出:
    異常を投げ出さない
  • array要素アクセス
  • reference operator[](size_type i);
    const_reference operator[](size_type i) const;

    Requires: i < N
    戻り値:
    インデックスiの要素
    放出:
    異常を投げ出さない.
  • reference at(size_type i);
    const_reference at(size_type i) const;

    戻り値:
    インデックスiの要素
    放出:std::range_error if i >= N
  • reference front();
    const_reference front() const;

    要件:N > 0
    戻り値:
    最初の要素
    放出:
    異常を投げ出さない
  • reference back();
    const_reference back() const;

    要件:N > 0
    戻り値:
    最後の要素
    放出:
    異常を投げ出さない
  • const T* data() const;

    戻り値:elems
    放出:
    異常を投げ出さない
  • T* c_array();

    戻り値:elems
    放出:
    異常を投げ出さない
  • arrayモディファイヤ
  • void swap(array<T, N>& other);

    効果:std::swap_ranges(begin(), end(), other.begin())
    複雑度:Nに基づく線形成長
  • void assign(const T& value);

    効果:std::fill_n(begin(), N, value)
  • array特殊アルゴリズム
  • template<typename T, std::size_t N> void swap(array<T, N>& x, array<T, N>& y);

    効果:x.swap(y)
    放出:
    異常を投げ出さない.

  •  
    見えるboost.arrayはSTLコンテナとの汎用インタフェースを提供しています.だから簡単に使えます.特筆すべきはboostがカスタムコンストラクション関数とコピーコンストラクション関数を提供していないことです.でもboost.arrayはこのように初期化できます.
    #include
     #include
     using namespace std;
     using namespace boost;
     int main()
     {
         array a = {1,2,3,4,5,6};
    //一般配列一致アクセス形式
         for(size_t i = 0; i < a.size(); i++)
            cout << a[i] << "";
         cout << endl;
     
    //反復アクセス
         array::iterator itr = a.begin();
         for(;itr != a.end();++itr)
             cout << *itr << "";
         cout << endl;
         
    //at()のサポート
         cout << a.at(5) << endl;
       
         return 0;
     }
     
    信じてるよarrayはきっとあなたの選択に違いない.
    皆さんの批判と提案を歓迎します.問題があればbichengに連絡してください[email protected] . 著者は本文のすべての権利を放棄した.
    参考文献:
     
    コンパイラ:vs 2008