Boost::array紹介
本稿では,c++で静的配列をサポートするコンテナ:boost.を紹介する.array.
boost.arrayは次世代の標準ライブラリに現れる可能性が高い.
1.なぜ一定の大きさの配列の容器が必要なのか
まず、固定サイズの配列はよく見られますが、stlはvectorを提供していますが、vectorは動的に成長可能な配列として静的配列より少しオーバーヘッドが多く、一部の人から見れば耐えられません.c++には固定サイズの容量の配列容器も必要で、もちろん、性能は普通の配列に匹敵する.
boost.arrayはこの需要に応じて生まれた.
boost.arrayは、ほとんどのがすべてではない「可逆容器(reversable container)」のニーズを実現した.ArrayがSTL可逆容器ではない理由は:は構造関数を提供していません. 要素には、不確定な初期値がある可能性があります. コンテナには、ディスペンサのサポートはありません.
「シーケンス」を実装する必要はありません(C++規格の23.1.1、[lib.sequence.reqmts]を参照).ただし、以下を除きます.は、 は、
2.ヘッダー・ファイルと関連メンバー関数の宣言:
Reference
Header
Class template array(クラステンプレートarray)
戻り値:
最初の要素にある反復器
放出:
異常を投げ出さない
戻り値:
最後の要素の後にある反復器
放出:
異常を投げ出さない
戻り値:
逆反復の最初の要素にある逆反復器
戻り値:
逆反復の最後の要素の後にある逆反復器
戻り値:
戻り値:
放出:
異常を投げ出さない
戻り値:
放出:
異常を投げ出さない
Requires:
戻り値:
インデックス
放出:
異常を投げ出さない.
戻り値:
インデックス
放出:
要件:
戻り値:
最初の要素
放出:
異常を投げ出さない
要件:
戻り値:
最後の要素
放出:
異常を投げ出さない
戻り値:
放出:
異常を投げ出さない
戻り値:
放出:
異常を投げ出さない
効果:
複雑度:
効果:
効果:
放出:
異常を投げ出さない.
見える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
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
//一般配列一致アクセス形式
for(size_t i = 0; i < a.size(); i++)
cout << a[i] << "";
cout << endl;
//反復アクセス
array
for(;itr != a.end();++itr)
cout << *itr << "";
cout << endl;
//at()のサポート
cout << a.at(5) << endl;
return 0;
}
信じてるよarrayはきっとあなたの選択に違いない.
皆さんの批判と提案を歓迎します.問題があればbichengに連絡してください[email protected] . 著者は本文のすべての権利を放棄した.
参考文献:
コンパイラ:vs 2008