Boostでは、標準コンテナのインタフェースで使用できる固定長配列クラス、boost::array
を提供する。
boost::array
クラスは、組み込み配列にゼロオーバーヘッドな固定長配列クラスである。
このクラスは、組み込み配列とは異なり、std::vector
やstd::list
のような標準コンテナのインタフェースを持つ。
#include <iostream>
#include <boost/array.hpp>
#include <algorithm>
void disp(int x) { std::cout << x << ' '; }
int main()
{
boost::array<int, 3> ar = {3, 1, 4};
std::for_each(ar.begin(), ar.end(), disp);
}
実行結果:
3 1 4
テンプレート引数
boost::array
は、第1テンプレート引数に要素の型、第2テンプレート引数に要素数を取る。
この場合、「3要素のint
型配列」を作成している。
初期化
boost::array
は、組み込み配列と同様に、{ 1, 2, 3 }
のような初期化子リストによる初期化が可能である。
イテレータインタフェース
boost::array
は、std::vector
やstd::list
と同じように、イテレータを返すbegin()
/end()
のインタフェースを持つ。
配列の要素数を取得するには、size()
メンバ関数を使用する。
#include <iostream>
#include <boost/array.hpp>
int main()
{
boost::array<int, 3> ar = {3, 1, 4};
const std::size_t size = ar.size();
std::cout << size << std::endl;
}
実行結果:
3
boost::array
は、組み込み配列やstd::vector
と同じように、operator[]()
の添字演算子によって要素にランダムアクセスできる。
#include <iostream>
#include <boost/array.hpp>
int main()
{
boost::array<int, 3> ar = {3, 1, 4};
for (std::size_t i = 0; i < ar.size(); ++i)
std::cout << ar[i] << std::endl;
}
実行結果:
3
1
4
boost::array
は、begin()
、end()
メンバ関数によって、最初の要素を指すイテレータ、最後尾要素の次を指すイテレータを取得できる。
#include <iostream>
#include <boost/array.hpp>
#include <algorithm>
void disp(int x) { std::cout << x << ' '; }
int main()
{
boost::array<int, 3> ar = {3, 1, 4};
std::for_each(ar.begin(), ar.end(), disp);
}
実行結果:
3
1
4
イテレータの型は、boost::array<T, N>
クラスが持つ、以下のメンバ型で取得できる:
iterator
: 変更可能なイテレータconst_iterator
: 読み取り専用イテレータ
#include <iostream>
#include <boost/array.hpp>
#include <algorithm>
int main()
{
typedef boost::array<int, 3> Array;
Array ar = {3, 1, 4};
{
Array::iterator it = std::find(ar.begin(), ar.end(), 1);
if (it != ar.end())
std::cout << *it << std::endl;
}
{
Array::const_iterator it = std::find(ar.begin(), ar.end(), 4);
if (it != ar.end())
std::cout << *it << std::endl;
}
}
実行結果:
1
4